揮発性のメモ2

http://d.hatena.ne.jp/iww/

C言語で構造体を初期化する方法

よく忘れて本を見るのでメモ

typedef struct {
        int c;
        int d;
} hoge_t;

typedef struct {
        int a;
        int b;
        hoge_t hoge;
} piyo_t;

入れ子の構造体を用意

初期値を順番に書く方法

piyo_t p1 = { 1,2,{3,4} }; // 普通な書き方
piyo_t p2 = { 1,2, 3,4  }; // 順番さえあってればどうでもいい
piyo_t p3 = { 1,2,      }; // 途中までしかないときは、残りはゼロになる

最後のカンマは無視されるので、付けっぱなしの方が楽

変数名を指定する方法

// 昔風の書き方
piyo_t p4 = {   
    a : 1,     // 変数名 コロン 初期値
    b : 2,     
    hoge : {   // 入れ子も同じように
        c : 3,
        d : 4, 
    },          
};
// 今風の書き方
piyo_t p5 = {   
    .a = 1,     // ドット変数名 イコール 初期値
    .b = 2,
    .hoge = {   // 入れ子も同じように
        .c = 3,
        .d = 4, 
    },          
};
  • 今風の書き方*1と昔風の書き方*2は混在できる
  • 変数は順番を入れ替えても大丈夫
  • 書いてない変数はゼロになる
  • 最後のカンマは無視される
piyo_t p6 = {   
    .a = 1,
    .b = 2,
    .hoge.c = 3,
    .hoge.d = 4,
};

素数が少ないうちは、この書き方の方が見やすくていい

*1:C99

*2:gcc拡張