变量应该总是用文字初始化吗?

时间:2019-06-06 05:11:47

标签: c

main()
{
    int a = 5, b = a, sum;
    sum = a + b;
    printf("sum is %d",sum);
}

在此C程序中,变量b是在编译时还是在运行时初始化?
是编译时初始化吗?
(C语言)

2 个答案:

答案 0 :(得分:2)

不,变量不应该总是用文字初始化,尽管有些人喜欢确保在声明时对变量进行初始化(有些公司坚持这样做),以避免在编写不当的代码中读取未初始化的变量。

对于任何运行时行为:按条件规则适用。您的源代码仅描述您想要的行为,而不描述将要生成的机器代码。您的变量可能不会存在于已编译的二进制文件中,它等效于

int main()
{
    printf("sum is %d", 10);
}

(表达式int a = 5, b = a定义明确,因为,是一个排序点,因此a在读取其值以分配给b时被初始化。 )

答案 1 :(得分:1)

取决于编译器/解释器是否实现了constant propagation的算法。

C标准不强制不使用恒定传播。如果检测到该变量未突变,则可以将其替换为预先计算的值。 as-if rule说,随着时间的推移,我们可以做我们想要的任何优化,因为结果是预期的。