GCC很早就支持標簽式初始化結構體,標准C則是C99之後才對此進行了支持。兩者語法不同,效果相同。
例子:
struct Student {
char *name;
int age;
float score;
double money;
};
傳統GCC初始化代碼:
struct Student s1 = {
age: 18,
money: 100.23,
};
C99初始化代碼:
struct Student s1 = {
.age = 18,
.money = 100.23,
};
對於未顯式初始化的成員變量,編譯器自動進行默認初始化(int類型默認為0,float/double默認為0.0,指針默認為NULL)。
由於GCC標簽式初始化結構體特性出現的更早,所以可以推斷C99是借鑒了GCC的做法,只是在語法上做了一定的改變。這種語法不一致就會導致一些混亂的情況出現。為了避免這種混亂,GCC正在逐步放棄原來的語法,轉而支持C99標准。
在Linux2.6及以後內核源碼裡已經使用了C99的新式語法。