Question: I understand that sizeof is an operator, which is evaluated at compile time to an integer constant.
But it seem it can not be used in the #if preprocessor directive like:

```
#if 4 == sizeof(int)
    typedef int Int32;
#endif

```

(cygwin-gcc 3.4.4 as well as Visual C++ 6.0 report compile errors)

Why is such usage not allowed?

Answer: 
Because `sizeof` is evaluated at compilation time while directives are evaluated **before** compilation, and the part that does that is not the compiler, so it won't understand what `sizeof` means.
The sizeof is a C operator. You can't use C code in preprocessor directives. Preprocessor directives are evaluated before the compilation takes place.