Initialization of automatics within loops

Doug Gwyn gwyn at smoke.brl.mil
Wed Feb 6 06:57:35 AEST 1991


In article <1991Feb5.023809.389086 at locus.com> geoff at locus.com (Geoff Kuenning) writes:
-	    while (i < 3)
-		{
-		int j = 4;
-		printf ("i = %d, j = %d\n", i, j);
-		i++;
-		j++;
-		}
-What does this print?  On the machine I'm using, it prints the same value
-for j (j = 4) three times.  On the other hand, the programmer of XSend()
-clearly expected three different values for j.

The programmer clearly made a mistake.  j has the value 4 for each
execution of the printf().  I was unable to tell from the code
snippet just what the programmer intended; merely changing the
storage class of j to "static" would probably not be correct either.

-I just checked the ANSI C spec on this, and found it unclear.  It is
-explicitly stated that automatics are initialized on every entry to a
-compound statement.  However, it is not made clear whether the construct:
-	while (<expression>)
-	    <statement>
-is considered to *re-enter* the compound statement every time or not.

There is no question whatsoever about this.  The compound statement is
completely evaluated for each iteration; this includes the auto
initialization.



More information about the Comp.lang.c mailing list