【发布时间】:2020-08-12 06:44:15
【问题描述】:
我们知道结构体可以声明为:
struct correct {
int year;
int *p;
};
但我们不能将其声明为:
struct wrong {
int year = 2020;
int *p;
};
所以我的问题是:
Q1-为什么 C 设计不允许为结构的成员设置默认值?让我们程序员以后不用再初始化不是更方便吗?
Q2-对于正确的结构类型,year 和 p 是否都被 GCC 初始化为 0?
【问题讨论】:
-
第一个问题主要基于意见,因此不适合 Stack Overflow。对于第二个,它取决于声明该类型变量的方式/位置:What happens to a declared, uninitialized variable in C? Does it have a value?
-
@kaylum 这不是基于意见的。他们做出某种设计选择的原因是可以客观地回答的,前提是您知道答案,但很难找到。
-
这是一篇关于 C 语言历史的有趣文章:bell-labs.com/usr/dmr/www/chist.html。一个核心问题是结构如何映射到内存。引用:“我希望该结构不仅可以表征抽象对象,还可以描述可能从目录中读取的位集合。” 成员初始化不太可能被视为核心问题,因为有其他初始化结构的方法。
-
不过,您可以编写
struct foo { int year; int *p; } bar = {2020};并将bar.year初始化为 2020 并将bar.p初始化为 NULL,完全符合任何语言版本的标准。
标签: c