c语言变量初始化重要吗,在C中声明的未初始化变量会发生什么?它有价值吗?...

7df46de770f2a306752ce84282eaa5f5.png

明月笑刀无情

静态变量(文件范围和函数静态)初始化为零:int x; // zeroint y = 0; // also zerovoid foo() {

    static int x; // also zero}非静态变量(局部变量)是不确定的。在分配值之前读取它们会导致未定义的行为。void foo() {

    int x;

    printf("%d", x); // the compiler is free to crash here}在实践中,它们最初只是有一些荒谬的价值 - 一些编译器甚至可能会在查看调试器时输入特定的固定值以使其显而易见 - 但严格来说,编译器可以自由地执行从崩溃到召唤的任何操作恶魔通过你的鼻腔通道。至于为什么它是未定义的行为而不是简单的“未定义/任意值”,有许多CPU架构在其各种类型的表示中具有额外的标志位。一个现代的例子是Itanium,它的寄存器中有一个“Not a Thing”位 ; 当然,C标准起草人正在考虑一些较旧的架构。尝试使用设置了这些标志位的值可能会导致操作中的CPU异常确实不应该失败(例如,整数加法或分配给另一个变量)。如果你继续保留未初始化的变量,编译器可能会设置这些标志位的随机垃圾 - 意味着触摸未初始化的变量可能是致命的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值