关于块范围链接,没有错误,没有警告,但结果令人惊讶,我不明白为什么
About block scope chaining, no error, no warning, but the result is surprised and I can not figure out why
#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;
}
输出:
inner: 65532
outer: 22
输出令人惊讶,我不明白为什么。
编辑:编译方法:gcc test.c
int count = count * 2;
in 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", inner_count);
}
printf("outer: %d\n", outer_count);
return 0;
}
no warning
我不知道你使用什么编译器和选项,但是:
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 $
#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;
}
输出:
inner: 65532
outer: 22
输出令人惊讶,我不明白为什么。
编辑:编译方法:gcc test.c
int count = count * 2;
in 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", inner_count);
}
printf("outer: %d\n", outer_count);
return 0;
}
no warning
我不知道你使用什么编译器和选项,但是:
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 $