0

我想通过宏使用二进制标志,但在以下情况下出现编译器错误:

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

感谢您提前回复。

4

2 回答 2

8

去掉分号:

#define FLAG_A 0x01
#define FLAG_B 0x02

否则该语句将扩展为

binVal = 0x01; | 0x02;;
于 2012-08-03T05:45:35.073 回答
4

这就是为什么您永远不想在宏定义之后放置分号的原因。预处理器不需要它们;如果它们在那里,它们将被合并到扩展宏中,从而产生语法错误。利用

#define FLAG_A 0x01
#define FLAG_B 0x02

反而。如果你想要那些分号,你也可以使用枚举:

enum flag {
    FLAG_A = 0x1,
    FLAG_B = 0x2
};
于 2012-08-03T05:49:59.300 回答