我正在为我的嵌入式系统类编写设备处理程序,我正在尝试使用宏来检查第i位是否已设置。我的宏似乎没有正常工作,但内联函数。这是为什么?
#define TEST0 i&0x01
#define CLEAR0 i &= 0x01
inline short test0(short i) {
return i&0x01;
}
int main() {
short flag = 1;
//this doesnt work
if (TEST0(flag) == 0x01) {
CLEAR0(flag);
}
//but this does
if (test0(flag) == 0x01) {
CLEAR0(flag);
}
return 0;
}
答案 0 :(得分:3)
语法错误。宏需要一个参数。
#define TEST0(i) ((i) & 0x01)
另外,为了安全起见,请使用空格来表示可读性和括号。
答案 1 :(得分:1)
这是由于运营商优先问题。此外,您需要宏的参数。
它被解析如下:
if (i & (0x01 == 0x01))
添加parens和一个参数来修复:
#define TEST0(i) ((i)&0x01)
#define CLEAR0(i) ((i) &= 0x01)
答案 2 :(得分:0)
如果要将参数传递给宏,则应将其定义为接受参数:
#define TEST0(i) ((i)&0x01)
#define CLEAR0(i) do { i&=0x01; } while(0)
(其他修改涉及优先级和语法)。