宏需要三个参数,但只有两个参数

时间:2017-12-29 10:52:41

标签: macros

以下函数有三个参数: 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),因此导致了这个错误。 请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

当不需要第一个参数时,为其提供默认值(例如0)。然后使用#define FUN2(b, c) FUN(0,b,c)。您不能拥有与该函数同名的其他宏,因此我将其命名为FUN2

P.S。在C ++ 11(可能更早)中,您可以在函数定义和声明中直接分配默认值。但是请注意,您需要将第一个参数移到末尾。