私はいくつかのCコードでこれを見ました:
Wininfo W = { sizeof(Wininfo) };
これはどういう意味ですか?
私はいくつかのCコードでこれを見ました:
Wininfo W = { sizeof(Wininfo) };
これはどういう意味ですか?
このコードは、struct
ファンキーな C 初期化子構文を使用して各フィールドを宣言順に初期化しています。 http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=421を参照してください。この例の場合の重要な副作用は、残りのフィールドがゼロに初期化される値を指定しないことです。
このトリックは、Win32 API では比較的一般的なものです。API では、クライアント コードがコンパイルされるバージョンを示す方法として、サイズを事前に設定する必要があります。これらの多くの場合、バッファをクリアすることも期待されます。これは通常memset
、サイズ フィールドをsizeof
.
C/C++ プログラミング言語の構造体の初期化も参照してください。関連する例
toの最初のフィールドとその他のフィールドをゼロに設定する初期化式です。W
sizeof(Wininfo)
まず、これは声明ではなく、宣言です。宣言は C のステートメントではありません。
次に、この= { /* whatever */ }
パーツはイニシャライザです。オブジェクトの初期値を指定します。通常、{}
集約オブジェクト (配列または構造体) を初期化するには、 で囲まれた初期化子を使用します。ただし、C 言語のあまり知られていない機能は、スカラー オブジェクトの初期化子を次のようにオプションで{}
で囲むこともできることです。
int i = { 5 };
特定の宣言が正確に何を意味するかは、Wininfo
タイプが何であるかによって異なります。が集合体の場合W
、その最初のメンバーはsizeof(Wininfo)
値で初期化され、残りはゼロで初期化されます。がスカラーの場合W
、 の初期値を取得するだけですsizeof(Wininfo)
。