#include<stdio.h>
int main(){
static int a = 1;
static int b = a;
printf("\n a : %d b : %d \n",a,b);
return 0;
}
static.c: In function ‘main’:
static.c:4:2: error: initializer element is not constant
当我们使用常量初始化静态变量或保持未初始化时,我看到静态变量已正确编译。但与其他堆栈变量一样,驻留在数据段中的静态变量也会在编译时分配,并获取磁盘上的虚拟地址。堆变量在运行时获取物理地址,并在运行时初始化变量。 为什么静态变量不能用变量初始化。
答案 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
的值。