[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Lies in education [was Re: The "loop and a half"]

bartc wrote:
> 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.)