Rom*_*eev 3 c macros gcc c-preprocessor
我正在尝试将参数传递给宏,SETBIT使用另一个预定义的宏,如下所示:
#define SETBIT(ADDRESS,BIT,N) {(N) ? (ADDRESS &= ~(1<<BIT)) : (ADDRESS |= (1<<BIT))}
#define DAC_SYNC PORTB,3,POS
SETBIT(DAC_SYNC);
Run Code Online (Sandbox Code Playgroud)
但我接收器错误:
宏SETBIT只需要给出3个参数
有一篇文章提出以下建议:
防止误算算术运算:#define foo (a,b)或#define bar(x) lose((x))
但即使我仍有错误.顺便说一句,阅读我已经指出的文章我可以得出以下结论:预处理器扩展出现的所有宏.但实际上看起来宏#define DAC_SYNC PORTB,3,POS并没有被预处理器扩展.
任何人都可以更清楚地了解GCC的预处理器是如何工作的吗?
这有效:
#define SETBIT2(ADDRESS,BIT,N) ((N) ? (ADDRESS &= ~(1<<BIT)) : (ADDRESS |= (1<<BIT)))
#define SETBIT(PARAMS) SETBIT2(PARAMS)
#define PORTB 5
#define POS 7
#define DAC_SYNC PORTB,3,POS
int main() {
int a = SETBIT(DAC_SYNC);
return 0;
}
Run Code Online (Sandbox Code Playgroud)