GotW #102: Assertions and “UB” (Difficulty: 7/10)
This special Guru of the Week series focuses on contracts. Now that we have considered assertions, postconditions, and preconditions in GotWs #97-101, let’s pause and reflect: To what extent does a failed contract imply “UB”… either the Hidden Dragon of Undefined Behavior, or the Crouching Tiger of Unspecified Behavior? JG Question 1. Briefly, what is … Continue reading GotW #102: Assertions and “UB” (Difficulty: 7/10) →
This special Guru of the Week series focuses on contracts. Now that we have considered assertions, postconditions, and preconditions in GotWs #97-101, let’s pause and reflect: To what extent does a failed contract imply “UB”… either the Hidden Dragon of Undefined Behavior, or the Crouching Tiger of Unspecified Behavior?
JG Question
1. Briefly, what is the difference among:
(a) undefined behavior
(b) unspecified behavior
(c) implementation-defined behavior
Guru Questions
2. For each of the following, write a short function of the form:
/*...function name and signature...*/
{
assert( /*...some condition about the parameters...*/ );
/*...do something with parameters...*/;
}
where if the assertion is not checked and is false then the effect:
(a) is always undefined behavior
(b) possibly results in undefined behavior
(c) is never undefined or unspecified behavior
3. Explain how your answers to Questions 1 and 2 do, or do not, correspond with each other.
4. BONUS: Describe a valuable service that a tool could perform for assertions that satisfy the requirement in 2(a), that is not possible for other assertions.