0

运行时实体和加载时实体有什么区别。为什么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

4

1 回答 1

0

在您的代码中,

 static int x=i;

产生错误,因为在 中Cconst变量是const- 限定的,而不是编译时常量。您只能使用编译时常量来初始化全局静态变量。

相关:C11,第 §6.7.9 章

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

然后,回答

运行时实体和加载时实体的区别

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

您也可以参考我以前的答案以了解更多信息。

于 2015-07-30T06:50:50.307 回答