使用逗号传递宏参数

时间:2018-05-11 00:17:57

标签: c

在MSP430世界中,驱动器芯片具有使用GPIO引脚的功能:

GPIO_SetAsInputPin(port, pin)

我想要一个宏来定义一个引脚,例如:

#define PB1     (GPIO_PORT_P2, GPIO_PIN4)
#define PB2     (GPIO_PORT_P2, GPIO_PIN5)

当我用宏调用该函数时:

GPIO_setAsInputPin(PB1);

我在函数调用错误中得到的参数太少了。是否有不同的方法使这项工作?

1 个答案:

答案 0 :(得分:3)

PB1扩展的括号使它成为一个参数,中间有一个逗号运算符 - 所以你的调用扩展为:

GPIO_setAsInputPin((GPIO_PORT_P2, GPIO_PIN4))

您应该使用:

#define PB1   (GPIO_PORT_P2), (GPIO_PIN4)

扩展为:

GPIO_setAsInputPin((GPIO_PORT_P2), (GPIO_PIN4))

给你两个参数。或者你可以省略名字周围的括号,你可能是安全的。

如果GPIO_setAsInputPin本身是一个需要两个参数的宏,那么您可能仍会遇到问题。然后你需要像:

#define GPIO_setAsInputPin_1(x)    GPIO_setAsInputPin(x)

你会调用:

GPIO_setAsInputPin_1(PB1);

你得到输出:

GPIO_setAsInputPin((GPIO_PORT_P2), (GPIO_PIN4));

或基础宏扩展到的任何内容。