2

次のマクロ定義はどのように解決されますか?

#define EMAIL_SERVER_ADAPTER_FATAL_ERROR     MSB_RETURN_TYPE_FATAL_ERROR | 1

つまり、1 または MSB_RETURN_TYPE_FATAL_ERROR に解決されますか?

4

3 に答える 3

15

|マクロでは特別な意味はありません。マクロは次のように解決されます

MSB_RETURN_TYPE_FATAL_ERROR | 1

これは、2 つの値 (MSB_RETURN_TYPE_FATAL_ERROR と 1) のビットごとの OR です。

于 2013-05-24T12:42:44.123 に答える
4

マクロ内の|は、C および C++ の他の場所と同じ意味を持ちます。ビットごとの or を意味します。

推定 MSB_RETURN_TYPE_FATAL_ERROR可能値は何らかの数値です(そうでなければ、ほとんどコンパイルされません)。

引数のために、0x100 にします。

したがって、次のコード:

 return EMAIL_SERVER_ADAPTER_FATAL_ERROR; 

次のように展開されます。

 return MSB_RETURN_TYPE_FATAL_ERROR | 1;

これは次のようになります。

 return 0x100 | 1;

これは次と同じです。

 return 0x101; 

もちろん、MSB_RETURN_TYPE_FATAL_ERROR はおそらく 0x100 以外のものですが、原則は適用されます。

于 2013-05-24T12:44:45.730 に答える
1

マクロは単なるテキスト置換なので、

EMAIL_SERVER_ADAPTER_FATAL_ERROR 

代わりになります

MSB_RETURN_TYPE_FATAL_ERROR | 1

その後は単なる数値です (つまり、単純なビット単位の OR 演算)。

于 2013-05-24T12:43:09.110 に答える