加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_潮州站长网 (http://www.0768zz.com/)- 物联安全、建站、操作系统、云计算、数据迁移!
当前位置: 首页 > 教程 > 正文

GCC和C99中结构体的标签式初始化语法区别

发布时间:2021-12-10 11:35:51 所属栏目:教程 来源:互联网
导读:GCC很早就支持标签式初始化结构体,标准C则是C99之后才对此进行了支持。两者语法不同,效果相同。 例子: struct Student { char *name; int age; float score; double money; }; 传统GCC初始化代码: struct Student s1 = { age: 18, money: 100.23, }; C99
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的新式语法。

(编辑:我爱制作网_潮州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读