在C ++中将参数传递给no-op宏

时间:2012-11-06 00:04:04

标签: c++ noop

我收到以下错误消息

error: '0' cannot be used as a function

尝试编译以下行时:

NOOP(0 != width);

NOOP定义如下:

#define NOOP (void)0

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

2 个答案:

答案 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 ++编译器会忽略它。