我想通过宏使用二进制标志,但在以下内容中遇到编译器错误:
#define FLAG_A 0x01;
#define FLAG_B 0x02;
int binVal = 0;
binVal = FLAG_A | FLAG_B;
//getting 0x03 here
但编译器以:
结束error: expected primary-expression before ‘|’ token
试过:
binVal = 0x01 | 0x02; //this does perfectly well.
感谢您的回复。
答案 0 :(得分:8)
删除分号:
#define FLAG_A 0x01
#define FLAG_B 0x02
否则该声明将扩展为
binVal = 0x01; | 0x02;;
答案 1 :(得分:4)
这就是为什么你永远不会想要在宏定义之后添加分号。预处理器不需要它们;如果他们在那里,他们将被纳入扩展的宏,给出语法错误。使用
#define FLAG_A 0x01
#define FLAG_B 0x02
代替。如果你想要那些分号,你也可以使用枚举:
enum flag {
FLAG_A = 0x1,
FLAG_B = 0x2
};