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()这样的编译器级结构.