我试图将一些函数编写为宏,但我只是不知道该怎么做。
#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
错误。
是否可以将一个参数传递给宏并获得两个参数?
答案 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)
。