为什么当变量声明为global时,以下代码会返回错误。
int add(int x, int y) {
return x+y;
}
int ab = add(10, 20);
int main(void) {
printf("%d", ab);
}
但如果我这样打电话:
int add(int x, int y) {
return x+y;
}
int main(void) {
int ab = add(10, 20); // Variable declare inside main
printf("%d", ab);
}
然后执行没有错误。
答案 0 :(得分:7)
全局变量的初始值设定项必须常量,它们不能是任意表达式。
答案 1 :(得分:5)
在C语言中,您无法在函数外部执行全局作用域中的代码,并将函数的返回值存储在全局变量中。
全局变量必须在初始化时保持不变,并在您执行时:
x = func ( ... )
函数的返回不是常数。
答案 2 :(得分:3)
来自C标准的 3.5.7初始化部分:
具有静态存储持续时间的对象的初始值设定项中的所有表达式或具有聚合或联合类型的对象的初始化列表中的所有表达式都应为常量表达式。
且ab
具有静态存储持续时间,但add()
不是常量表达式。
答案 3 :(得分:2)
全局变量可以通过常量表达式初始化。由于它们的值设置为编译时间,而未设置为运行时。