使用C ++中的宏进行二进制操作

时间:2012-08-03 05:44:42

标签: c++ macros binary

我想通过宏使用二进制标志,但在以下内容中遇到编译器错误:

#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.

感谢您的回复。

2 个答案:

答案 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
};