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