GCCとC 99における構造体のラベル式初期化構文の違い
1052 ワード
GCCは早くからラベル式初期化構造体をサポートしており,標準CはC 99以降にサポートされている.両者は文法が異なり,効果は同じである.
例:
従来のGCC初期化コード:
C 99初期化コード:
明示的に初期化されていないメンバー変数の場合、コンパイラは自動的にデフォルト初期化を行います(intタイプのデフォルトは0、float/doubleのデフォルトは0.0、ポインタのデフォルトはNULL).
GCCタグ式初期化構造体の特性がより早く現れたため,C 99はGCCの手法を参考にしたものと推定され,文法的に一定の変更を行っただけである.このような文法の不一致はいくつかの混乱を招く.このような混乱を避けるために、GCCは元の文法を徐々に放棄し、C 99基準を支持している.
Linux 2です.6以降、カーネルソースにはC 99の新式文法が使用されている.
例:
struct Student {
char *name;
int age;
float score;
double money;
};
従来のGCC初期化コード:
struct Student s1 = {
age: 18,
money: 100.23,
};
C 99初期化コード:
struct Student s1 = {
.age = 18,
.money = 100.23,
};
明示的に初期化されていないメンバー変数の場合、コンパイラは自動的にデフォルト初期化を行います(intタイプのデフォルトは0、float/doubleのデフォルトは0.0、ポインタのデフォルトはNULL).
GCCタグ式初期化構造体の特性がより早く現れたため,C 99はGCCの手法を参考にしたものと推定され,文法的に一定の変更を行っただけである.このような文法の不一致はいくつかの混乱を招く.このような混乱を避けるために、GCCは元の文法を徐々に放棄し、C 99基準を支持している.
Linux 2です.6以降、カーネルソースにはC 99の新式文法が使用されている.