参见英文答案 >
Why can’t I use sizeof in a preprocessor condition?2
我有这个: @H_404_3@#if sizeof(int) #error Can't use sizeof in a #if #endif
我有这个: @H_404_3@#if sizeof(int) #error Can't use sizeof in a #if #endif
我得到这个编译错误:
@H_404_3@missing binary operator before token "("为什么我不能在这里使用sizeof运算符?
解决方法
因为在运行预处理器之后计算出sizeof(),因此#if的信息不可用.
C编译器在逻辑上分为两个阶段,即使大多数现代编译器不分开它们.首先,源是预处理的.这涉及到处理和替换所有预处理条件(#if,#define,用替换替换定义的单词).然后将源传递,处理,到编译器本身.预处理器只是最低限度地意识到C的结构,它没有类型知识,因此它不能处理像sizeof()的编译器级结构.