歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> GCC和C99中結構體的標簽式初始化語法差異

GCC和C99中結構體的標簽式初始化語法差異

日期:2017/3/1 9:06:22   编辑:Linux編程

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的新式語法。

Copyright © Linux教程網 All Rights Reserved