On Mon, Nov 25, 2024 at 07:53:05PM -0500, Mouse wrote: > There's also > > sizeof (int) - 1 > > which is ambiguous even _with_ the parens; it means either > (sizeof(int))-1 > or > sizeof((int)-1) > > In this case, I think the ambiguity is resolved by operator precedence
C99 6.5.4 says cast-expression ::= unary-expression | ( type-name ) cast-expression and 6.5.3 says unary-expression ::= postfix-expression | ++ unary-expression | -- unary-expression | unary-operator cast-expression | sizeof unary-expression | sizeof ( type-name ) The reason these are stratified is so that sizeof ( type-name ) is unambiguous. As written it also rules out ++(int)x, but that's a defect -- it is not semantically valid but there's no reason to gratuitously make it a syntax error. Especially since ++ +(int)x is accepted and that's semantically equally invalid. -- David A. Holland dholl...@netbsd.org