Gal*_*axy 2 c scope global-variables
假设我有一个全局变量,并且想为其分配另一个变量。我发现您可以将另一个值分配给函数内的全局变量:
int i = 8;
int main(void)
{
i = 9; /* Modifies i */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,在函数外部分配全局变量不起作用!
int i = 8;
i = 9; /* Compiler error */
int main(void)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
warning: data definition has no type or storage class
warning: type defaults to 'int' in declaration of 'i'
error: redefinition of 'i'
note: previous definition of 'i' was here
int i = 8;
^
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
这是对全局变量的定义,可以将其初始化为特定值:
int i = 8;
Run Code Online (Sandbox Code Playgroud)
请注意,并不是代码会被执行,该变量将被设置为最初包含8。要么将其视为“魔术”(对许多标准未真正定义的事物有用的模型),要么考虑带有值的表在执行任何代码之前将其复制到内存位置。
这是一段没有执行“框架”的代码。
(或者您打算这样做。编译器有其他意见,请参见下文。)
i = 9;
Run Code Online (Sandbox Code Playgroud)
没有包含它的函数。目前尚不清楚何时执行。那就是编译器不喜欢的东西。
在C语言中,所有代码都必须在函数内部,并且仅在调用该函数(例如从)时才执行main()。
其他语言,大多数是通过解释来执行“脚本”的语言(而不是例如通过编译器转换成可执行代码的语言)允许在任何地方使用代码。C是不同的。
编译器对此有不同的看法:
i = 9;
Run Code Online (Sandbox Code Playgroud)
int,即默认值i现在确实是错误的,因此请显示错误并使编译失败i是这就是读取引用的编译器输出的方法。