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 に答える