#define语法解决方案

时间:2012-11-28 23:03:40

标签: c syntax c-preprocessor

我已定义以下内容,当然这不正确...

#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 语法的帮助。

2 个答案:

答案 0 :(得分:6)

需要间接:

#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的替换列表作为调用真实SET_PIN_MODE_INPUT的参数列表。

答案 1 :(得分:1)

您可能希望将它们定义为头文件中的静态内联函数,而不是定义。通过这种方式,您将获得类型检查,并且您不会因预处理器而发生意外情况。

编译器将内联它们。