关于块作用域链接,没有错误,没有警告,但是结果令人惊讶,我不知道为什么

问题描述

python -m pip install –upgrade pip

输出

#include <stdio.h>

int main(void) {
  int count = 22;
  {
    int count = count * 2;
    printf("inner: %d\n",count);
  }
  printf("outer: %d\n",count);
  return 0;
}

输出令人惊讶,我不知道为什么。

编辑:编译方法:gcc test.c

解决方法

int count = count * 2;
count * 2中的

计数 未初始化,因为它是内部的 count ,而不是外部的 count

所以您的代码等同于

int main(void) {
  int outer_count = 22;
  {
    int inner_count = inner_count * 2;
    printf("inner: %d\n",inner_count);
  }
  printf("outer: %d\n",outer_count);
  return 0;
}

但不

int main(void) {
  int outer_count = 22;
  {
    int inner_count = outer_count * 2;
    printf("inner: %d\n",outer_count);
  return 0;
}

没有警告

我不知道您使用什么编译器和选项,但是:

pi@raspberrypi:/tmp $ gcc -Wall c.c
c.c: In function ‘main’:
c.c:6:9: warning: ‘count’ is used uninitialized in this function [-Wuninitialized]
     int count = count * 2;
         ^~~~~
pi@raspberrypi:/tmp $