【发布时间】:2014-04-11 19:27:52
【问题描述】:
我正在尝试使用另一个预定义的宏将参数传递给宏 SETBIT,如下所示:
#define SETBIT(ADDRESS,BIT,N) {(N) ? (ADDRESS &= ~(1<<BIT)) : (ADDRESS |= (1<<BIT))}
#define DAC_SYNC PORTB,3,POS
SETBIT(DAC_SYNC);
但是我收到错误:
宏 SETBIT 需要 3 个参数,只有 1 个给定
有一个article 有以下建议:
为了防止算术运算的错误嵌套:#define foo (a,b) 或 #define bar(x) lose((x))
但即使我仍然有错误。顺便说一句,阅读我指出的文章,我可以得出以下结论:预处理器扩展了所有出现的宏。但实际上看起来宏 #define DAC_SYNC PORTB,3,POS 没有被预处理器扩展。
谁能更清楚 GCC 的预处理器是如何工作的?
【问题讨论】:
标签: c gcc macros c-preprocessor