【发布时间】:2015-08-14 23:52:20
【问题描述】:
如何在编译时测试C中宏参数的字符串值?
我正在用 C (GNU) 为微控制器编写封装宏。
我有一些像这样工作的宏:
#define _ReadBits(port, mask) (PORT ## port) & (mask)
#define ReadBits(portmask) _ReadBits(portmask)
#define SWITCH D, (1<<7)
我可以这样说:
foo = ReadBits(SWITCH);
我会得到的
foo = PORTD & (1<<7);
效果很好。我想扩展这些来做这样的事情:
#define _ConfigAnalog(port, mask) BUILD_BUG_ON(port != B); AD1PCFGCLR = (mask)
#define ConfigAnalog(portmask) _ConfigAnalog(portmask)
也就是说,如果参数port 不是B,我希望发生编译时错误(因为这个微控制器可以仅将端口B 配置为模拟)。
有没有办法在 C 中做到这一点?
【问题讨论】:
标签: c macros c-preprocessor