8

私はいくつかのCコードでこれを見ました:

Wininfo W = { sizeof(Wininfo) };

これはどういう意味ですか?

4

3 に答える 3

15

このコードは、structファンキーな C 初期化子構文を使用して各フィールドを宣言順に初期化しています。 http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=421を参照してください。この例の場合の重要な副作用は、残りのフィールドがゼロに初期化される値を指定しないことです。

このトリックは、Win32 API では比較的一般的なものです。API では、クライアント コードがコンパイルされるバージョンを示す方法として、サイズを事前に設定する必要があります。これらの多くの場合、バッファをクリアすることも期待されます。これは通常memset、サイズ フィールドをsizeof.

C/C++ プログラミング言語の構造体の初期化も参照してください。関連する例

于 2010-01-11T15:02:50.137 に答える
9

toの最初のフィールドとその他のフィールドをゼロに設定する初期化式です。Wsizeof(Wininfo)

于 2010-01-11T15:04:09.430 に答える
5

まず、これは声明ではなく、宣言です。宣言は C のステートメントではありません。

次に、この= { /* whatever */ }パーツはイニシャライザです。オブジェクトの初期値を指定します。通常、{}集約オブジェクト (配列または構造体) を初期化するには、 で囲まれた初期化子を使用します。ただし、C 言語のあまり知られていない機能は、スカラー オブジェクトの初期化子を次のようにオプションで{}で囲むこともできることです。

int i = { 5 };

特定の宣言が正確に何を意味するかは、Wininfoタイプが何であるかによって異なります。が集合体の場合W、その最初のメンバーはsizeof(Wininfo)値で初期化され、残りはゼロで初期化されます。がスカラーの場合W、 の初期値を取得するだけですsizeof(Wininfo)

于 2010-01-11T15:08:46.767 に答える