80k
声誉贡献者R..在SO 上告诉我,我们不能用函数的返回值初始化全局变量,因为这不被认为是常量,全局变量必须用常量初始化。他的话是真的,我明白了正如预期的那样,该程序出现以下错误 - 。这initializer element is not a constant
是程序:
#include<stdio.h>
int foo();
int gvar=foo(); //ERROR
int main()
{
printf("%d",gvar);
}
int foo()
{
return 8;
}
但是在这种情况下,我只是不明白为什么上述程序的后续更改版本根本没有显示错误并且工作正常。在第二个程序中,我使用相同函数的返回值初始化相同的全局变量foo()
。你能告诉我导致这种结果变化的严格技术原因是什么?为什么在声明时使用函数的返回值初始化全局变量会导致错误,但在从内部完成时,使用相同返回值的相同初始化工作正常功能?
#include<stdio.h>
int foo();
int gvar;
int main()
{
gvar=foo();
printf("%d",gvar);
}
int foo()
{
return 8;
}
输出 8