我有这个:
#if sizeof(int)
#error Can't use sizeof in a #if
#endif
我得到这个编译器错误:
missing binary operator before token "("
为什么我不能在这里使用 sizeof 运算符?
我有这个:
#if sizeof(int)
#error Can't use sizeof in a #if
#endif
我得到这个编译器错误:
missing binary operator before token "("
为什么我不能在这里使用 sizeof 运算符?
因为 sizeof() 是在预处理器运行后计算的,所以信息对于#if
.
C 编译器在逻辑上分为两个阶段,即使大多数现代编译器没有将它们分开。首先,对源进行预处理。这涉及制定和替换所有预处理器条件(#if,#define,用它们的替换替换定义的单词)。然后将源代码传递、处理给编译器本身。预处理器对 C 的结构只有最低限度的了解,它没有类型知识,所以它不能处理像 sizeof() 这样的编译器级别的构造。
因为您只能在预处理器指令中使用文字常量。此外,sizeof(int) 总是大于 0,所以我相信这个 #if 无论如何都会一直为真。
只需使用普通的 if-else
if (sizeof(x)==2) {...}
else if (sizeof(x)==4) {...}
else {...}
并且编译器将在编译时对其进行优化...
考虑:
#if sizeof(MyClass) > 3
#define MY_CONSTRAINT 2
#endif
class MyClass
{
#if MY_CONSTRAINT == 3
int myMember = 3;
#endif
};
现在,这不是用正确的语法编写的,因为距离我上次使用 C++ 已经有一段时间了,但重点仍然存在 :)