为什么我们只允许在全局部分声明和定义变量?为什么不在全局部分包括赋值? 示例:
#include<stdio.h>
int a;
a=5;//Valid because its similar to int a=5; Therefore a initialiser to a Tentative definition
a=8;//Invalid because We can have only one initialiser for a tentative definition
void main(){
...
}
我们为什么需要这个?如果允许我们对一个暂定定义使用多个初始化程序,将会产生什么后果
我的下一个问题是为什么只允许常量初始化元素?
#include<stdio.h>
int i=5;
int j=i+5;//[Error] initializer element is not constant
void main(){
...
}
同样,如果不存在此规则,我们将面临什么后果?
请注意我的问题不是为什么会发生这种情况?我想弄清楚为什么首先要给出这些限制。
最佳答案
对于这两个问题,答案是一样的,在文件范围内没有语句的执行或表达式的计算,所有这些都在编译时完成。
其他语言(例如C++)有一个在程序启动时动态初始化的模型。这是一个复杂的问题,例如,因为来自不同编译单元的初始化器之间没有自然的顺序,但可能隐式地相互依赖。 SO 是 this question 的绝佳信息来源,也是。
C 试图保持简单,对程序员来说简单易用,对编译器构建者来说易于实现。
关于c - 为什么我们不允许在 C 文件范围内有赋值语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26195619/