C および C における自動構造体と配列の部分初期化
この誤解は、自動構造体と自動配列の部分初期化が行われるという誤った仮定から生じています。 C では許可されています。この考えに反して、標準では、完全な初期化または初期化なしの 2 つのケースのみが明示的に定義されています。初期化。
部分初期化
「部分初期化」という用語は規格では定義されていません。これは、構造体または配列内のメンバーのサブセットのみを初期化することを指します。
完全な初期化
完全な初期化は、構造体または配列のすべてのメンバーが明示的に初期化されるときに発生します。例:
struct somestruct { int a; int b; int c; }; somestruct s = {1, 2, 3};
初期化なし
初期化が指定されていない場合、動作は変数の記憶域タイプによって異なります:
部分的実際の初期化
標準の動作ではないにもかかわらず、部分的な構造体と配列メンバーの自動初期化は、Visual Studio や gcc/g を含むほとんどのコンパイラでサポートされています。
C 標準 (C99)
セクション 6.7。 8.21 初期化
要素の数より少ない初期化子が提供された場合
C Standard (C 03)
セクション 8.5.1 集合体
存在する初期化子の数が少ない場合、初期化されていないメンバーは値が初期化されました。値の初期化はオブジェクトの種類によって異なります。たとえば、非共用体クラス型の非静的データ メンバーは値で初期化されますが、整数などのプリミティブ型はゼロで初期化されます。
結論
部分自動構造体と配列の初期化は非標準の動作であり、適切に処理しないと未定義の結果が生じる可能性があります。移植性と正確性を確保するために、常に完全な初期化を行うか、初期化を行わないようにしてください。
以上がC および C での自動構造体と配列の部分初期化は許可および定義されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。