【发布时间】:2018-11-12 15:34:09
【问题描述】:
假设我有一个全局变量,我想给它分配另一个变量。我发现您可以为函数内的全局变量分配另一个值:
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;
^
为什么会这样?
【问题讨论】:
-
当它在函数之外时,你希望它什么时候执行?
-
在函数之外只允许定义和声明。你不能有一般性的陈述。这就是指定语言的方式。
-
这对 SO 来说不是一个好问题。唯一合理的答案是“因为这就是语言的设计方式”这一主题的变体——问为什么这样设计是没有建设性的;自古以来就是这样,在这个问题上不会改变。曾经有一个古老的标准,您可能已经能够在文件范围内写入
i = 9;,并且它会隐含类型为int,但GCC 8.1.0 警告data definition has no type or storage class和-std=c90,有或没有-pedantic. -
您是否考虑过更有效的
int i = 9;而不是int i = 8; i = 9;?代码执行从main()开始。 -
@DeiDei 实际上这是一个有效的观点。
标签: c scope global-variables