Is it standard for #if to assume undefined symbolic constants as 0?

c, c-preprocessor, gcc

Solution

Yes, this is specified by the standard in 6.10.1:

After all replacements due to macro expansion and the defined unary operator have been performed, all remaining identifiers (including those lexically identical to keywords) are replaced with the pp-number 0

Problem

In this `c` program ``` #include<stdio.h> int main() { #if UnDefinedSymbolicConstant==0 printf("UnDefinedSymbolicConstant is equal to 0\n "); #else printf("UnDefinedSymbolicConstant is not equal to 0\n"); #endif return 0; } ``` UnDefinedSymbolicConstant has not been `#define` anywhere, still it is being assumed as 0 and gives the output on `gcc-4.3.4` as: ``` UnDefinedSymbolicConstant is equal to 0 ``` so, Is this the standard behaviour or it works like this only in gcc?

Original source