是否可以用少于linux中的所有参数来调用类似函数的宏? 实际上这样做只会在Visual Studio中生成警告(警告4003),未分配的变量将替换为“”。
但是使用g ++编译它会在linux中生成错误(“错误:宏***需要**参数,但只有**给出”)。
有没有办法禁用或克服它?
答案 0 :(得分:2)
宏调用中的参数数量必须与宏定义中的参数数量完全匹配。所以,不,你不能调用参数少于参数的宏。
要“克服”它,您可以使用不同数量的参数定义多个不同名称的宏。
C ++ 0x(尚未标准,但您的编译器可能部分支持)添加了对可变参数宏的支持,可以使用可变数量的参数调用它们。
答案 1 :(得分:2)
标准(§16.3 - 宏替换)很明显,你必须传递相同数量的参数:
“如果宏中的标识符列表 定义不以一个结束 省略号,参数的数量 (包括那些包含的论点 没有预处理令牌) 调用类似函数的宏 应等于参数的数量 在宏观定义中。“
我不知道有任何g ++选项可以覆盖它。