以下函数有三个参数: void FUN(int a,int b,int c) 有些情况下不需要第一个参数。为了优化,以下列方式定义宏(与函数名称具有相同的名称):
#define FUN(a,b,c)FUN(b,c)
#define MACRO1 //宏没有值 - 试图表明函数调用中不需要参数1。
以下语句给出错误:Macro需要3个参数,但只有2个参数 FUN(MACRO1 x,y) 我正在使用gcc编译器进行编译。我使用了" -E"查看预处理输出的选项,看起来外部宏首先被解析(FUN),然后是内部宏(MACRO1),因此导致了这个错误。 请帮我解决这个问题。
答案 0 :(得分:0)
当不需要第一个参数时,为其提供默认值(例如0
)。然后使用#define FUN2(b, c) FUN(0,b,c)
。您不能拥有与该函数同名的其他宏,因此我将其命名为FUN2
。
P.S。在C ++ 11(可能更早)中,您可以在函数定义和声明中直接分配默认值。但是请注意,您需要将第一个参数移到末尾。