main()
{
int a = 5, b = a, sum;
sum = a + b;
printf("sum is %d",sum);
}
在此C程序中,变量b
是在编译时还是在运行时初始化?
是编译时初始化吗?
(C语言)
答案 0 :(得分:2)
不,变量不应该总是用文字初始化,尽管有些人喜欢确保在声明时对变量进行初始化(有些公司坚持这样做),以避免在编写不当的代码中读取未初始化的变量。
对于任何运行时行为:按条件规则适用。您的源代码仅描述您想要的行为,而不描述将要生成的机器代码。您的变量可能不会存在于已编译的二进制文件中,它等效于
int main()
{
printf("sum is %d", 10);
}
(表达式int a = 5, b = a
定义明确,因为,
是一个排序点,因此a
在读取其值以分配给b
时被初始化。 )
答案 1 :(得分:1)
取决于编译器/解释器是否实现了constant propagation的算法。
C标准不强制不使用恒定传播。如果检测到该变量未突变,则可以将其替换为预先计算的值。 as-if rule说,随着时间的推移,我们可以做我们想要的任何优化,因为结果是预期的。