
Paul Mensonides wrote:
What I said here isn't quite correct, so I'll elaborate. The block has to be parsed just enough to determine nested conditional compilation blocks. E.g.
#if 0 #if 0 #endif #endif
....but it isn't supposed to parse anything else--including an operands to directives. So, the following should still work:
#if 0 #if // no expression! #endif #endif
So, basically, the only parse is to tell if a name following '#' on a new line is one of the conditional compilation directives or not. Specifically, from 16.1/6, "...the group that it controls is skipped: directives are processed only through the name that determines the directive in order to keep track of the level of nested conditionals; the rest of the directives' preprocessing tokens are ignored, as are the other preprocessing tokens in the group."
Ok, thanks for elaborating. I think this gives me enough details to file a bug report with the compiler vendor. Markus