1. ホーム
  2. c

[解決済み] 構造体を0に初期化する

2022-05-28 06:03:23

質問

このような構造体があったとして

typedef struct
{
    unsigned char c1;
    unsigned char c2;
} myStruct;

この構造体を0に初期化する最も簡単な方法は何でしょうか? 次のようにすれば十分でしょうか?

myStruct _m1 = {0};

または 明示的に各メンバーを0に初期化する必要がありますか?

myStruct _m2 = {0,0};

どのように解決するのですか?

まず、一番簡単なのは( 入力が少ない ) 、そしてこれは動作が保証されており、すべてのメンバーが 0 [参照1] となります。 .

2番目の方が読みやすいですね。

どちらを選ぶかは、ユーザーの好みか、コーディング規約で定められているものによります。

[参考文献1] C99 スタンダード 6.7.8.21 を参照してください。

中括弧で囲まれたリスト内の初期化子の数が集約の要素又はメンバの数より少ない場合、又は既知のサイズの配列を初期化するために使用される文字列リテラルの文字数が配列内の要素の数より少ない場合、集約の残りは静的記憶期間を持つオブジェクトと同様に暗黙的に初期化されなければならない。

良い読み物です。

CとC++ : 自動構造体の部分的な初期化