你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2017-01-19] 来源:Linux社区  作者:smstong [字体: ]

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

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-01/139721.htm

linux
相关资讯       gcc  C99 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款