2013-05-21 146 views
3

为什么当变量声明为全局变量时,下面的代码返回错误。函数赋值给变量C

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); 
} 

那么它的执行没有错误。

+5

文件范围变量只能用常量表达式进行初始化。函数调用不是一个。 –

回答

7

全局变量的初始值必须是常量,它们不能是任意表达式。

5

在C语言中,您不能在全局范围内,在函数外部执行代码,并将函数的返回值存储在全局变量中。

全局变量必须初始化常数,当你做:

x = func (...) 

的函数的返回是不恒定。

3

从C标准的部分3.5.7 初始化

所有用于具有静态存储持续时间中或在初始化列表为具有聚集或联合的物体的目标初始值设定的表达式类型应该是常量表达式。

ab具有静态存储持续时间,但是add()不是一个常量表达式。

2

全局变量可以通过常量表达式进行初始化。因为它们的值设置为编译时间未处于运行时间

+0

s /常量值/常量表达式/ – Jens

+0

@Jens固定,谢谢。 – Alex