Pourquoi ne puis-je pas utiliser sizeof dans une condition de pré-processeur?

Je comprends que sizeof est un opérateur qui est évalué lors de la compilation en une constante entière. Mais il semble que cela ne puisse pas être utilisé dans la directive du préprocesseur #if comme:

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

(cygwin-gcc 3.4.4 ainsi que les erreurs de compilation du rapport Visual C ++ 6.0)

Pourquoi un tel usage n’est-il pas autorisé?

    Parce que sizeof est évalué au moment de la compilation, alors que les directives sont évaluées avant la compilation et que la partie qui le fait n’est pas le compilateur, elle ne comprend donc pas ce que signifie sizeof .

    Le sizeof est un opérateur C. Vous ne pouvez pas utiliser le code C dans les directives du préprocesseur. Les directives du préprocesseur sont évaluées avant la compilation.