C++ 是否可以将一个参数传递给宏,然后输出两个参数?

C++ 是否可以将一个参数传递给宏,然后输出两个参数?,c++,macros,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].DIR

我试着写一些函数作为宏,但我就是不知道怎么做

#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后,我得到了无效的数组下标错误类型“int[int]”


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

C++宏在下一行换行时结束,因此分号也在展开。正如最初建议的那样:


@JakobJug:为什么宏不换个方向呢?定义pinmodeL,rl[0]。DIRSET=R[1],然后定义PA0 pinmodePORTA,PIN0\u bm


除了需要一个小的修正,给出定义的PIMMoLTR,R.L.DistSET.R。然后Pa0扩展到PiMoDePoTa,Pi0NeBm,然后PoTa. DrStC= Pin 0Bm。< /P>如果你有C++语言,你能解释为什么你要用宏来解决这个问题吗?宏不是方法。pinModePA0与PORTA、PIN0_bm完全相同;[0]。DIRSET=PORTA,PIN0_bm;[1] ,这显然毫无意义,或者说一个std::map可以做你想做的事情。@JakobJug:为什么不让宏反过来呢?定义Pin MultRead,R L[0 ]。DrSt集=R[1 ],然后在C++中定义P0 PoMoDePoTa,Pin 0BM……这将是费时的。当你测量时,你看到了多大的性能差异?我建议你使用C++,因为宏被劝阻,并证明给你自己,你的同事和你的老板,你似乎相信。根据我在嵌入式系统多年的经验,我不鼓励使用宏,主要是因为-O3非常好,而且可以运行。非常确定{PORTA,PIN0_bm}[0]。DIRSET={PORTA,PIN0_bm}[1]也不是他需要的。{PORTA,PIN0_bm}不是数组,你不能下标它。@Mooningduck我的意思是,它不能完全满足他的需要,但是我不知道有没有一种方法可以使用宏来做他想要的事情。我怀疑PIN0_bm是否与PORTAtypeof属于同一类型,因为PORTAtypeof是一个不可移植的gcc扩展,并且您仍然可以将{…}强制转换为某个类型,它没有类型。