Defect Report #132
Submission Date: 03 Dec 93
Submittor: WG14
Source: Clive Feather
Question
Can undefined behavior occur at translation time, or only at run time? 
If the former, then how does one distinguish the two cases in the 
C Standard?
Consider the translation unit:
/* No headers included */
int checkup()
	{
	/* Case 1 */
	if (0)
		printf("Printing.\n");
	/* Case 2 */
	return 2 || 1 / 0;
	}
Case 1 calls a function with a variable number of arguments without 
a prototype in scope. But the call is never actually executed. Now, 
subclause 6.3.2.2, in the first paragraph of page 41, states that 
this is undefined. Is it undefined to translate the code, or 
to execute it? The definition of undefined behavior (subclause 
3.16) clearly allows the former, and subclause 5.3.2.2 does not 
say that the undefined behavior occurs only if the call is actually 
executed.
On the other hand, while subclause 6.3.5 uses similar wording about 
division by zero, ``we all know'' that my Case 2 is strictly 
conforming.
So what is the answer? If undefined behavior cannot occur at translation 
time, why the wording in subclause 3.16? If it can, how do I distinguish 
the possibilities? And, by the way, what is the answer for my Case 
1?
Response
The Response to Defect Report #109 addresses this issue. The translation 
unit must be successfully translated.
Previous Defect Report
< - > 
Next Defect Report