我收到以下错误消息
error: '0' cannot be used as a function
尝试编译以下行时:
NOOP(0 != width);
NOOP定义如下:
#define NOOP (void)0
源代码是SDK的一部分 - 所以它应该没问题。我发现(void)0
实际上是一种在C ++中描述“无操作”的有效方法。但是,为什么要将布尔参数传递给不执行任何操作的函数?你如何摆脱错误信息?
答案 0 :(得分:5)
MACRO没有定义任何参数,因此在预处理器替换代码之后,该语句最终看起来像这样:
(void)0(0 != width);
这使编译器误以为你试图在0上使用“()”运算符(即使用0作为函数)
我建议您删除“(0!=宽度)”(这是误导性的)并且只写NOOP;
答案 1 :(得分:4)
“(void)0(0!=width);
”无效C ++,所以不行。 (void)0;
本身在C ++中没有任何作用,因此可以用作noop。而不是你当前的定义,我会使用:
#define NOOP(X) (void)0
这告诉C ++预处理器,有一个名为NOOP
的预处理器函数,它接受任何类型的一个参数,并用(void)0
替换整个函数调用。因此,如果您有一行代码NOOP("HELLO WORLD")
,那么预处理器会将整个事物替换为(void)0
,而C ++编译器会忽略它。