运行时实体和加载时间实体

时间:2015-07-30 06:48:07

标签: c storage-class-specifier

运行时实体和加载时间实体之间有什么区别。为什么static存储类是加载时实体?

程序:

#include<stdio.h>
void main(){
int i=10;
static int x=i;
if(x==i)
    printf("Equal");
else if(x>i)
    printf("Greater than");
else
    printf("Less than");
}

上述程序产生编译时错误。为什么我们无法通过x将值分配给静态变量i

1 个答案:

答案 0 :(得分:0)

在您的代码中,

 static int x=i;

产生错误,原因是Cconst变量是const - 合格,而不是编译时常量。您只能使用编译时常量来初始化全局静态变量。

相关:C11,章节§6.7.9

  

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

然后,回答

  

运行时实体与加载时间实体之间的区别

从内存分配的角度来看,加载时分配由编译器处理,运行时分配由库函数处理,如malloc()calloc()free()等。< / p>

您还可以参考to this previous answer of mine了解更多信息。