【问题标题】:Passing macro arguments to function with comma用逗号将宏参数传递给函数
【发布时间】:2018-05-11 10:27:06
【问题描述】:

在 MSP430 世界中,驱动程序库具有使用 GPIO 引脚的功能:

GPIO_SetAsInputPin(port, pin)

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

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

当我用宏调用函数时:

GPIO_setAsInputPin(PB1);

我在函数调用错误中得到的参数太少。有没有不同的方法来完成这项工作?

【问题讨论】:

    标签: c


    【解决方案1】:

    围绕 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));
    

    或任何底层宏扩展为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多