我有这样的宏:
#define _DDR_0 DDRD
#define _DDR_1 DDRD
#define _DDR_2 DDRD
// ....
#define _PN_0 0
#define _PN_1 1
#define _PN_2 2
// ...
/** Configure pin as output */
#define as_output(pin) sbi(_DDR_##pin, _PN_##pin)
void as_output_n(const uint8_t pin);
它的用法如下:
as_output(2);
uint8_t b = 1;
as_output_n(b);
_n
变量用于变量,常量的宏(因为使用宏执行此操作要快得多)。
是否有任何可能的方法来使它始终使用as_output
,并且根据它是常量还是变量,使用宏或函数?
答案 0 :(得分:2)
宏由预处理器扩展,它不知道代码的作用。从预处理器的角度来看,所有宏参数都只是标记(没有逻辑意义)。在这种情况下,as_output
宏用于制作新代码(通过令牌粘贴)。
所以,你正在尝试做的事情,不可能只使用宏(如果b
本身就是一个宏,可能会有一种方法,但我想这不是你想要的)。
您可以为您的_DDR*
和PN*
值以及内联函数而不是宏使用const数组。