初始化元素代码错误

时间:2011-03-28 10:25:25

标签: c

当我运行这段代码时:

void main(){
   int a = 5;
   static int i = a+5;
   printf("%d", i);
}

我收到错误:初始化元素不是常量

这是什么意思?

5 个答案:

答案 0 :(得分:5)

功能范围内的静态变量进入数据段。数据段在编译时初始化。这意味着必须在编译时知道初始值。在您的情况下,初始值(a的值)来自堆栈上的变量,该变量仅在运行时可用。

答案 1 :(得分:1)

在C中,初始化程序应该是一些常量。但你可以这样做......

int a = 5;
static int i;
i = a + 5;
printf("%d", i);

这不会产生任何错误...

答案 2 :(得分:0)

您无法将变量分配给静态。

答案 3 :(得分:0)

因为你初始化变量i不是一个常数(如int a = 5;),而是一个非法的表达式(a+5)。

答案 4 :(得分:0)

关键字static意味着变量i只有一个实例,并且该实例将在程序的整个生命周期中存在。例如,如果要在函数调用之间存储值,这很有用。

当应用程序启动时初始化变量时,该值必须是常量。

在你的情况下,没有必要声明“static”,因为每次调用函数时它都会得到一个新值。