Lies in education [was Re: The "loop and a half"]
> While on the subject of C syntax, here are some fun ambiguities:
> f(x); // call function with arg x, or declare x of type f?
> a*b; // multiply a by b, or declare b of type pointer to a?
> (a)*b // multiply a by b, or cast *b to type a?
Technically these are not ambiguous in C, because the context always
makes it clear whether you're dealing with a declaration or an expression.
The indications can be subtle sometimes, but they're there.
In C++ they really are ambiguous in some cases, and some arbitrary
rules had to be added to disambiguate them. (I think the rule is
"if it could be a declaration, then it is" or something like that.)