为什么可以在 C 中的循环内定义变量?

Why is it possible to define a variable inside a loop in C?

为什么这段代码没有给出重定义错误:

int main(void)
{
    for (int i = 0; i < 2; i++)
    {
        int number = 5;
    }
}

而这段代码:

int main(void)
{
    int number = 5;
    int number = 5;
}

基本上,在循环内创建变量将使变量的作用域停留在这个循环中。 “数字”在您的循环之外不存在。

在第一段代码中,number的范围从执行到for循环开始时开始,到执行到for循环结束时结束。在这种情况下,for循环体被执行了两次,number被创建和销毁了两次,并且有两个不相交的作用域。在第二个代码中,范围不是不相交的,因为之前的 number 在定义第二个代码时仍然坚持它的生命周期,并且它们在同一范围内,所以这是一个重新定义错误。

Redfinition 错误是编译时问题,而不是运行时问题。您不会在循环中遇到重定义错误,因为您在该范围内只有一个 number 声明。

在第二个片段中,您在同一范围内有两个 number 的声明,因此出现错误。