5

ヘッダーにはwinbase.h、次の行があります。

#define WAIT_OBJECT_0       ((STATUS_WAIT_0 ) + 0 )

STATUS_WAIT_0winnt.hヘッダーで次のように定義されています。

#define STATUS_WAIT_0       ((DWORD)0x00000000L)

そしてDWORDに typedef されunsigned longます。

私の質問は、なぜ値0に追加されるのSTATUS_WAIT_0ですか?

4

4 に答える 4

2

これは、ファミリのメンバーが基本値に依存するファミリであるマクロを定義するスタイルにすぎません。

#define NONE 0
#define UNITY  (NONE + 1)
#define COUPLE (NONE + 2)
#define TRIPLE (NONE + 3)

後でメンテナンス中にベース値を 60 にすることが決定された場合NONE、ベース マクロの上に定義されているため、60 に変更するとすべてが変更されます。それが行われる別の方法は

#define NONE 0
#define UNO  (NONE + 1)
#define DUO  (UNO + 1)
#define TRIO (DUO + 1)

この特定のインスタンスでは、ベース値と最初の待機オブジェクトの値が同じに設定されています。これは、開発者が同じ整数値で両方を表すことを望んでいたためです。

于 2013-10-18T08:08:17.230 に答える