实际输出是什么,为什么?

时间:2019-07-04 11:40:25

标签: c variables static initialization local

#include<stdio.h>
int main()
{
  int x, y, z;
  z = x+y;
  printf("%d", z);
  return 0;
}

我在GCC编译器中获得了32765,代码块在某处不打印任何内容,并显示0。

1 个答案:

答案 0 :(得分:1)

(具有自动存储持续时间的)局部变量如果没有静态存储持续时间,则不会隐式初始化。

使用具有不确定(甚至是陷阱)值的未初始​​化变量会导致不确定的行为。

但是,如果您要通过以下方式更改程序

#include<stdio.h>

int x, y;

int main( void )
{
  int z;
  z = x + y;

  printf( "%d", z );

  return 0;
}

或采用以下方式

#include<stdio.h>

int main( void )
{
  static int x, y;
  int z;

  z = x + y;

  printf( "%d", z );

  return 0;
}

那么实际输出将为0。因为变量xy具有静态存储持续时间,并且由编译器隐式初始化为零。