【问题标题】:Unexpected output in C code [duplicate]C代码中的意外输出[重复]
【发布时间】:2016-11-14 20:19:48
【问题描述】:

以下代码打印AA

#include <stdio.h>
int main()
{
    for(int i;i;i--)
        printf("A");
    return 0;
}

为什么变量i的初始值是2,而不是一些垃圾值?

变量i的生命周期是静态的还是自动的?

【问题讨论】:

  • 2 是垃圾值。
  • @chux 你怎么确定?
  • 此程序在未初始化时使用具有自动存储持续时间的对象的值表现出未定义的行为。
  • @Coder 对于 UB,任何值都是 int 的候选垃圾。 (包括陷阱)
  • @chux 垃圾值随机出现。但是如果你多次运行这段代码,变量的初始值总是2。如何?

标签: c for-loop scope initialization declaration


【解决方案1】:

显然变量i 没有初始化。这意味着实现的行为是未定义的。 i 的值只是垃圾值。这里是2

【讨论】:

  • @EugeneSh。感谢您的编辑。
【解决方案2】:

变量i 的作用域是整个for 语句(包括它的主体)。它具有自动存储期限,退出循环后将被销毁。您不能将其声明为具有静态存储持续时间,例如

for(static int i;i;i--)
    printf("A");

由于变量i 未初始化,它有一个不确定的值,可以是陷阱值。

【讨论】:

  • 如果是trap值,还会导致UB吗?
  • @ameyCU 是的,它会导致异常。
猜你喜欢
  • 1970-01-01
  • 2013-07-07
  • 2017-10-07
  • 2015-12-02
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 2013-02-02
相关资源
最近更新 更多