12

我有这个:

#if sizeof(int)
    #error Can't use sizeof in a #if
#endif

我得到这个编译器错误:

missing binary operator before token "("

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

4

4 回答 4

12

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

C 编译器在逻辑上分为两个阶段,即使大多数现代编译器没有将它们分开。首先,对源进行预处理。这涉及制定和替换所有预处理器条件(#if,#define,用它们的替换替换定义的单词)。然后将源代码传递、处理给编译器本身。预处理器对 C 的结构只有最低限度的了解,它没有类型知识,所以它不能处理像 sizeof() 这样的编译器级别的构造。

于 2010-02-23T15:53:54.667 回答
1

因为您只能在预处理器指令中使用文字常量。此外,sizeof(int) 总是大于 0,所以我相信这个 #if 无论如何都会一直为真。

于 2010-02-23T15:53:37.857 回答
-3

只需使用普通的 if-else

if      (sizeof(x)==2)  {...}
else if (sizeof(x)==4)  {...}
else                    {...}

并且编译器将在编译时对其进行优化...

于 2013-02-28T14:02:10.827 回答
-3

考虑:

#if sizeof(MyClass) > 3
   #define MY_CONSTRAINT 2
#endif

class MyClass
{
   #if MY_CONSTRAINT == 3
      int myMember = 3;
   #endif
};

现在,这不是用正确的语法编写的,因为距离我上次使用 C++ 已经有一段时间了,但重点仍然存在 :)

于 2010-02-23T15:57:25.703 回答