使用较少的参数调用C ++宏

时间:2010-07-21 15:44:08

标签: c++ macros g++ c-preprocessor

是否可以用少于linux中的所有参数来调用类似函数的宏? 实际上这样做只会在Visual Studio中生成警告(警告4003),未分配的变量将替换为“”。

但是使用g ++编译它会在linux中生成错误(“错误:宏***需要**参数,但只有**给出”)。

有没有办法禁用或克服它?

2 个答案:

答案 0 :(得分:2)

宏调用中的参数数量必须与宏定义中的参数数量完全匹配。所以,不,你不能调用参数少于参数的宏。

要“克服”它,您可以使用不同数量的参数定义多个不同名称的宏。

C ++ 0x(尚未标准,但您的编译器可能部分支持)添加了对可变参数宏的支持,可以使用可变数量的参数调用它们。

答案 1 :(得分:2)

标准(§16.3 - 宏替换)很明显,你必须传递相同数量的参数:

  

“如果宏中的标识符列表   定义不以一个结束   省略号,参数的数量   (包括那些包含的论点   没有预处理令牌)   调用类似函数的宏   应等于参数的数量   在宏观定义中。“

我不知道有任何g ++选项可以覆盖它。