为什么我们不能为结构的成员设置默认值?

0 c

我们知道一个结构体可以声明为:

struct correct {
    int year;
    int *p; 
};
Run Code Online (Sandbox Code Playgroud)

但我们不能将其声明为:

struct wrong {
    int year = 2020;
    int *p; 
};
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

Q1-为什么 C 被设计为不允许为结构的成员设置默认值?允许它这样我们程序员以后不需要初始化它不是更方便吗?

Q2-对于正确的结构类型,yearp是否0都由 GCC初始化?

ndi*_*dim 5

先回答 Q2:初始化为 0 仅针对特定存储空间中的变量指定。函数内部的局部变量根本没有指定要初始化。

解决这个问题后,这让我可以推测 Q1:为什么 C 语言的设计者以这种方式设计 C。

链接器可以将所有静态(编译单元本地的)和全局符号放入单个内存区域,在程序启动时可以轻松将其清零。这是一个非常简单的概念,涵盖了很多。

否则,您将需要以每种类型的方式来定义默认值。这可以作为包含要复制的默认值的原型内存区域或将一段内存设置为默认值的一段代码来完成。后者的概念存在,称为构造函数,并在编程语言 C++ 中实现。每次在某处定义某种类型的变量时,都需要有用于复制默认值或调用构造函数的代码。

C 被设计为用于编写 Unix 操作系统的系统语言,我认为他们只是想避免编译器、链接器、运行时等的所有复杂性。如果你想要一种更高级的语言,你可以选择或发明另一种语。即使回到 1970 年代初期,CPU 周期、内存和存储的限制也可能有利于不太复杂的代码。