gcc拡張 構造体の初期化
仕事で見たコードでなんだこれ?と思ったコードがあった。調べてみるとgcc拡張を使ったコードだった。
#include<stdio.h> typedef struct Hoge { int x; int y; int z; } Hoge; /* gcc拡張を使った初期化 */ Hoge hoge = { x: 1, y: 2, /* z: 3, */ /* 初期化なしのメンバは0で初期化される */ }; /* C99から取り込まれた書き方 */ Hoge fuga = { /* .x = 1, */ /* 初期化なしのメンバは0で初期化される */ .y = 2, .z = 3, }; int main(void) { printf("x:%d, y:%d, z:%d\n", hoge.x, hoge.y, hoge.z); printf("x:%d, y:%d, z:%d\n", fuga.x, fuga.y, fuga.z); return 0; }
ポータビリティを考えれば、C99の書き方をする方がよいだろうが、どっちにしろ標準Cでは無い書き方。構造体のメンバが多い場合は可読性が高くなるだろうな。