4.2.2 If

The ‘ #if ’ directive allows you to test the value of an arithmetic expression, rather than the mere existence of one macro. Its syntax is

     #if expression

     controlled text

     #endif /* expression

expression is a C expression of integer type, subject to stringent restrictions. It may contain

The preprocessor does not know anything about types in the language. Therefore, sizeof operators are not recognized in ‘ #if ’, and neither are enum constants. They will be taken as identifiers which are not macros, and replaced by zero. In the case of sizeof , this is likely to cause the expression to be invalid.

The preprocessor calculates the value of expression . It carries out all calculations in the widest integer type known to the compiler; on most machines supported by GCC this is 64 bits. This is not the same rule as the compiler uses to calculate the value of a constant expression, and may give different results in some cases. If the value comes out to be nonzero, the ‘ #if ’ succeeds and the controlled text is included; otherwise it is skipped.