for != while

Kenneth R. Ballou ballou at brahms.BERKELEY.EDU
Wed Sep 3 06:55:22 AEST 1986


In article <86900030 at haddock> karl at haddock writes:
>
>It's well known that the equivalence between for and while breaks down if
>there's a "continue" statement.  Here's another case I just discovered:
>
>main() {
>	char *foo = "outer";
>	for (;; printf(foo),exit(0)) {
>		char *foo = "inner";
>	}
>}
>
>This prints "outer" (vax SVR2 compiler), though the for-while equivalence
>might lead one to expect "inner".

I don't think the issue here is equivalence of for and while statements.
The point is that the scope of the inner 'foo' is the compound statement
which is the body of the for statement.  So, quite rightly, the 'foo'
given as the argument to printf in the third expression of the for statement
refers to the most closely nested declaration of 'foo' -- the body of the
for statement is one block level higher and is not visible at this point.

---------------

Kenneth R. Ballou                ...!ucbvax!brahms!ballou
Dept. of Mathematics
University of California
Berkeley, California  94720



More information about the Comp.lang.c mailing list