初始化元素不是常量 - 用于静态初始化

时间:2014-10-11 16:15:47

标签: c

程序:

#include<stdio.h>
int main(){
        static int a = 1;
        static int b = a;
        printf("\n a : %d b : %d \n",a,b);
        return 0;
}

O / P:

static.c: In function ‘main’:
static.c:4:2: error: initializer element is not constant

当我们使用常量初始化静态变量或保持未初始化时,我看到静态变量已正确编译。但与其他堆栈变量一样,驻留在数据段中的静态变量也会在编译时分配,并获取磁盘上的虚拟地址。堆变量在运行时获取物理地址,并在运行时初始化变量。 为什么静态变量不能用变量初始化。

2 个答案:

答案 0 :(得分:2)

N1570§6.7.9/ p4:

  

初始化程序中具有静态或。的对象的所有表达式   线程存储持续时间应为常量表达式或字符串   文字。

答案 1 :(得分:2)

在C中,静态变量只能使用常量文字进行初始化。

int main() 
{
int c=10
static int i = c; //error
printf(" value of i = %d", i);
getchar();
return 0;
}

必须在执行main()之前初始化所有带静态的变量。因此is not known at translation time cannot变量使用initialization of static的值。