为什么我不能在#if中使用sizeof()?

Rob*_*ert 12 c sizeof c-preprocessor

我有这个:

#if sizeof(int)
    #error Can't use sizeof in a #if
#endif
Run Code Online (Sandbox Code Playgroud)

我得到这个编译器错误:

missing binary operator before token "("
Run Code Online (Sandbox Code Playgroud)

为什么我不能在这里使用sizeof运算符?

And*_*ett 12

因为sizeof()是在预处理器运行后计算的,所以信息不可用#if.

C编译器在逻辑上分为两个阶段,即使大多数现代编译器没有将它们分开.首先,对源进行预处理.这包括计算并替换所有预处理器条件(#if,#define,用替换替换定义的单词).然后将源传递,处理到编译器本身.预处理器只是最不了解C的结构,它没有类型知识,所以它不能处理像sizeof()这样的编译器级结构.