From: utzoo!decvax!microsof!uw-beave!cornell!vax135!ariel!orion!lime!houti!hogpc!houxz!ihnp4!ixn5c!inuxc!pur-ee!davy
Newsgroups: net.lang.c
Title: Re: C pet peeve - (nf)
Article-I.D.: pur-ee.845
Posted: Tue Mar 22 18:27:34 1983
Received: Thu Mar 24 07:17:11 1983

#R:linus:-1644100:pur-ee:15500014:000:1021
pur-ee!davy    Mar 22 10:06:00 1983


	While we're talking pet peeves, mine has always been the fact that
"return" (and "sizeof") do not require parentheses.  While I'm not saying
that they should require them, consider the following:

	main() 
	{
		int i;

		for (i=0; i < 5; i++)
			foo(i);
	}
	foo(n) 
	int n;
	{
		if (n == 3)
			return		/* <--- Note I forgot the ';' */
		printf("foo...%d\n", n);
	}

Now, the obvious intention of this program is to produce the output:

		foo...0
		foo...1
		foo...2
		foo...4

But, instead, it produces the output:

		foo...3

This is because (for those of you who can't figure it out) the "return", since
there is no semicolon, will return the "value" of the printf.  Thus, the 
compiler compiles foo() as:

		foo(n)
		int n;
		{
			if (n == 3) 
				return(printf("foo...%d\n", n));
		}

I wish the compiler would print something in this case (a return without a
semicolon followed immediately by a newline) like:

	warning: 'return' statement possibly misinterpreted

Anybody agree with me?

--Dave Curry
pur-ee!davy