为什么我不能在 C 中为函数之外的全局变量赋值?



假设我有一个全局变量,我想给它分配另一个变量。我发现你可以为函数中的全局变量赋值:

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;
^

为什么会这样?

这是全局变量的定义,可选择初始化为特定值:

int i = 8;

请注意,执行的不是代码,变量将设置为最初包含 8。要么将其视为"魔术"(对于许多未真正由标准定义的事情的有用模型(,要么考虑在执行任何代码之前将值复制到内存位置的表。

这是一段没有执行它的"框架"的代码。
(或者你打算这样做。编译器有其他意见,见下文。

i = 9;

没有包含它的函数。目前尚不清楚何时应该执行。这是编译器不喜欢的。
在 C 中,所有代码都必须位于函数内部,并且只有在调用该函数时才会执行,例如从main().

其他语言,主要是那些通过解释来执行"脚本"的语言(而不是将代码转换为可执行对象,例如由编译器(允许在任何地方都有代码。C 是不同的。

编译器对此有不同的看法:

i = 9;
  • 它不在函数内部,因此它不能是代码
  • 它看起来像一个变量定义,假设你的意思是它是一个int,即默认的
  • 但是依赖默认值不是一个好主意,所以警告缺少类型并使用默认值
  • 另外,如果它是一个定义,那么它是i的第二个,现在这确实是错误的,所以显示错误并编译失败
  • 为了有所帮助,请提及i的第一个定义在哪里

这就是读取您引用的编译器输出的方法。

相关内容

  • 没有找到相关文章

最新更新