私は簡単なテストで少し問題があります:私はLOG
、DEBUG
とERROR
の3レベルのロガーを持っています。コンパイル時には、必要な値の間のビット単位または演算でレベルエラーを定義します。しかし、私が受け取るタイプのメッセージでLEVEL
をテストしようとすると、間違っています。 5 & 2
レベルが定数の場合は1
を返しますが、をint
変数に入れると、この問題は発生しません。なぜ誰かが知っていますか?ここCまたは#defineとintの間のbitwise
は定義が、これはためlogger.c
printf("level %d\n", LEVEL);
printf("type %d\n", type);
int level = LEVEL;
printf("and %d\n", LEVEL & type);
printf("and %d\n", level & type);
printf("and %d\n", 5 & 2);
結果
level 5
type 2
and 1
and 0
and 0
'#define LEVEL LOG | –
赤ちゃんの最初のマクロ:#define LEVEL(LOG | ERROR) –
これらのコメントをよりよく説明するために、プリプロセッサマクロは単純なテキストの置き換えです。 printfは 'printf("と%d \ n "、LOG | ERROR&type);'、 '(LOG | ERROR)&タイプ' –