我在文件顶部定义了以下变量,就在我的
#include
指令之后;
int a = 5;
int b = a;
但是我收到编译时错误。我知道全局变量隐式具有静态存储持续时间,但我不确定这如何或是否与此错误的原因相关。
正如您所说,全局变量隐式具有静态存储持续时间。这是因为全局变量是在编译时初始化的。所以这正是您收到错误的原因。
来自C99标准6.7.8:
具有静态存储持续时间的对象的初始值设定项中的所有表达式都应为常量表达式或字符串文字。
要绕过这条规则,你可以使用以下“技巧”。
int a = 5;
int b;
int main()
{
b = a;
//rest of code goes here.
}
需要一个常量表达式来初始化全局变量,尽管
a
在这种情况下对我们来说似乎完全是常量,但编译器不会这样看。
当我阅读代码时,目标是使用在单个点定义的相同值来初始化
a
和 b
。
实现此目的的一种方法是为
a
和 b
定义通用初始值设定项:
#define INIT 5
int a = INIT;
int b = INIT;