#define语法解决方案

Pab*_*blo 1 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)
Run Code Online (Sandbox Code Playgroud)

我想像这样使用它们:

SET_PIN_MODE_INPUT(LED_CLOCK_PIN)
Run Code Online (Sandbox Code Playgroud)

所以我需要C语法的帮助.

Jam*_*lis 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)
Run Code Online (Sandbox Code Playgroud)

使用当前的宏,您将传递一个参数SET_PIN_MODE_INPUT,这需要三个参数.

此解决方案使用间接使用替换列表LED_CLOCK_PIN作为参数列表来调用real SET_PIN_MODE_INPUT.

  • @James,也许应该提到宏和左边的空白`(`这对于它起作用是必不可少的.甚至可能适合在两者之间粘贴评论以强调它. (2认同)