是否可以将一个参数传递给宏并得出两个参数?

时间:2018-10-22 20:35:47

标签: c++ macros

我试图将一些函数编写为宏,但我只是不知道该怎么做。

#define PA0 (PORTA, PIN0_bm);
#define PA1 (PORTA, PIN1_bm);
...
#define PA7 (PORTA, PIN7_bm);

#define PD0 (PORTD, PIN0_bm);
#define PD1 (PORTD, PIN1_bm);
...
#define PD7 (PORTD, PIN7_bm);

然后使用函数宏

#define pinMode(x)  (x[0].DIRSET = x[1])

我想在预处理器之后看起来像

pinMode(PA0) -> (PORTA.DIRSET = PIN0_bm)

编译(AVR-gcc)后,出现invalid types 'int[int]' for array subscript错误。

是否可以将一个参数传递给宏并获得两个参数?

1 个答案:

答案 0 :(得分:-1)

C ++宏在下一个换行符处结束,因此分号也得到了扩展。正如Mooing Duck最初建议的那样:

  

@JakobJug:为什么没有相反的宏? #define pinmode(L,R) (L[0].DIRSET=R[1]),然后#define PA0 pinmode(PORTA,PIN0_bm)

除需要稍作校正外,给出#define pinmode(L,R) (L.DIRSET=R)。然后PA0扩展到pinmode(PORTA,PIN0_bm),然后扩展到(PORTA.DIRSET=PIN0_bm)