#define C中的元组
我希望能够定义一个表示其他宏所需参数的元组。
我认为展示我想要的最好方法是展示一个例子:
#include #define LED_PORT PORTB #define LED_DDR DDRB #define LED_PIN PB7 #define LED LED_PORT, LED_DDR, LED_PIN #define OUTPUT(port, ddr, pin) ddr |= 1 << pin void main(void) { OUTPUT(LED); }
我想将OUTPUT(LED)
扩展为:
LED_DDR |= 1 << LED_PIN
我得到的问题是扩展的顺序,并导致以下错误:
宏“OUTPUT”需要3个参数,但只有1个参数
这适用于具有定制硬件的AVR项目,其中我已经定义了LED
和其他具有相应LED_PORT
LED_DDR
和LED_PIN
。
然后我想要定义更多的宏,这些宏可以使用这个LED并使用适当的参数来映射到最简洁的方式。
这是否可以使用标准的C预处理器?
您可以向宏添加一个间接级别来实现此目的:
#define OUTPUT_I(port, ddr, pin) ddr |= 1 << pin #define OUTPUT(spec) OUTPUT_I(spec)
在重新扫描期间, spec
在OUTPUT_I
之前OUTPUT_I
,因此OUTPUT_I
宏看到三个参数。