2

我收到以下错误消息

error: '0' cannot be used as a function

尝试编译以下行时:

NOOP(0 != width);

NOOP 定义如下:

#define NOOP (void)0

源代码是 SDK 的一部分 - 所以应该没问题。而且我发现这(void)0实际上是一种在 C++ 中描述“无操作”的有效方法。但是为什么要将布尔参数传递给什么都不做的函数呢?以及如何摆脱错误信息?

4

2 回答 2

5

MACRO 上没有定义任何参数,因此在预处理器替换代码后,该语句最终看起来像这样:

(void)0(0 != width);

这使编译器误以为您正在尝试在 0 上使用“()”运算符。(即使用 0 作为函数)

我建议您删除“(0!=宽度)”(它具有误导性)而只写NOOP;

于 2012-11-06T00:07:53.387 回答
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++ 编译器会继续忽略它。

于 2012-11-06T00:08:52.410 回答