为什么“ C”代码有效,而不是发出重新声明错误? [重复]

问题描述 投票:0回答:2
#include <stdio.h>

void main() {
    int var = 99;
    for (int var = 13; var == 13; var++)  // Why not putting up a variable redeclaration error here ?
        printf("Inside loop, var is = %d\n", var);
    printf("Outside loop, var is = %d\n", var);
}

代码的输出是:

Inside loop, var is = 13
Outside loop, var is = 99

同样的困惑也适用于在main()中声明和定义的函数。

c scope variable-declaration
2个回答
2
投票
int var = 99;  // Outer scope
for(int var = 13; var == 13; var++)  // More inner scope

它们处于不同范围。可以在更多内部作用域中声明变量,这些内部作用域与外部作用域中的变量具有相同的名称。在这种情况下,内部声明会“遮盖”外部声明。当内部var在范围内时,var将引用循环内的内部var。内部var超出范围后,var将引用外部var


1
投票

范围。如果变量位于不同的作用域内,则可以使用相同的名称定义变量。就像在单独的函数中命名变量var一样。它仍然可以工作。

但是这是不安全的,最好使用不同的名称。

在每个作用域内,如果有两个具有相同名称的变量,则程序将使用在该作用域中定义的变量。]​​>

您的for循环定义了一个新范围。

© www.soinside.com 2019 - 2024. All rights reserved.