假设我有一个全局变量,我想为它分配另一个变量。我发现你可以为函数内的全局变量分配另一个值:
int i = 8;
int main(void)
{
i = 9; /* Modifies i */
return 0;
}
但是,在函数外部分配全局变量不起作用!
int i = 8;
i = 9; /* Compiler error */
int main(void)
{
return 0;
}
我收到以下错误消息:
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;
^
为什么会这样?
答案 0 :(得分:4)
这是全局变量的定义,可选的初始化为特定值:
int i = 8;
请注意,它不是可执行的代码,变量只会被设置为最初包含8.要么将其视为“魔法”(对于许多未经标准定义的事物的有用模型)或者想到在执行任何代码之前将值复制到内存位置的表。
这是一段代码,没有执行它的“框架” (或者你打算成为。编译器有其他意见,见下文。)
i = 9;
没有包含它的功能。目前尚不清楚何时应该执行。这就是编译器不喜欢的。
在C中,所有代码都必须在函数内部,并且只有在调用该函数时才会执行,例如,来自main()
。
其他语言,主要是通过解释它们来执行“脚本”的语言(而不是将代码转换为可执行程序,例如通过编译器)允许在任何地方使用代码。 C是不同的。
编译器对此的看法不同:
i = 9;
int
,即默认i
的第二个,现在确实是错误的,所以显示错误并且编译失败i
的第一个定义这是如何读取您引用的编译器输出。