我已经定义了以下,当然不正确...
#define SET_PIN_MODE_INPUT(DREG, PORT, PIN) (DREG &= ~_BV(PIN), PORT &= ~_BV(PIN))
#define LED_CLOCK_PIN (DDRB, PORTB, PB3)
我想像这样使用它们:
SET_PIN_MODE_INPUT(LED_CLOCK_PIN)
所以我需要C语法方面的帮助。
我已经定义了以下,当然不正确...
#define SET_PIN_MODE_INPUT(DREG, PORT, PIN) (DREG &= ~_BV(PIN), PORT &= ~_BV(PIN))
#define LED_CLOCK_PIN (DDRB, PORTB, PB3)
我想像这样使用它们:
SET_PIN_MODE_INPUT(LED_CLOCK_PIN)
所以我需要C语法方面的帮助。
需要间接:
#define SET_PIN_MODE_INPUT_(DREG, PORT, PIN) (DREG &= ~_BV(PIN), PORT &= ~_BV(PIN))
#define SET_PIN_MODE_INPUT(ARGS) SET_PIN_MODE_INPUT_ ARGS
// Note that this is an object-like macro
#define LED_CLOCK_PIN /**/ (DDRB, PORTB, PB3)
使用当前的宏,您将单个参数传递给SET_PIN_MODE_INPUT
,这需要三个参数。
此解决方案使用间接来使用替换列表LED_CLOCK_PIN
作为调用 real 的参数列表SET_PIN_MODE_INPUT
。
您可能希望将它们定义为头文件中的静态内联函数,而不是定义。通过这种方式,您将获得类型检查,并且您不会因为预处理器而冒着发生意外事情的风险。
编译器将内联它们。