相关疑难解决方法(0)

在循环中重新声明for循环变量时出错

考虑一下C程序的片段:

for(int i = 0; i < 5; i++)
{
    int i = 10;  // <- Note the local variable

    printf("%d", i); 
}    
Run Code Online (Sandbox Code Playgroud)

它编译没有任何错误,并在执行时,它提供以下输出:

1010101010
Run Code Online (Sandbox Code Playgroud)

但是如果我在C++中编写类似的循环:

for(int i = 0; i < 5; i++)
{
     int i = 10;

     std::cout << i; 
}
Run Code Online (Sandbox Code Playgroud)

编译失败,出现此错误:

prog.cc:7:13: error: redeclaration of 'int i'  
     int i = 10;  
         ^  
prog.cc:5:13: note: 'int i' previously declared here  
     for(int i = 0; i < 5; i++)  
             ^   
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c c++ for-loop

24
推荐指数
2
解决办法
1255
查看次数

为什么C编译器在for循环体内没有给出重新声明错误?

在C语言中,如果我们写这个:

for(int i = 0; i < 7; i++)
{
    // for loop Body
}
Run Code Online (Sandbox Code Playgroud)

变量的范围i在for循环体内.没关系.

但是,如果我这样写:

for(int i = 0; i < 7; i++)
{
    long int i = 1; // Redeclaration of i
}
Run Code Online (Sandbox Code Playgroud)

这里,变量i在循环体内再次声明,但它成功编译并在C中运行.

但是,在C++中,编译器会"重新声明'long int i'"错误.

那么,为什么C编译器没有给出重新声明错误?这是编译器错误吗?

c c++ for-loop declaration

7
推荐指数
1
解决办法
255
查看次数

在C中重新声明for循环中的变量

gcc prog.c -Wall -Wextra -std=gnu11 -pedanticGCC编译器上使用命令编译了以下程序 .我想知道,它没有任何警告或错误,工作正常.

#include <stdio.h>

int main(void)
{
    for (int i = 0; i == 0;  i++) 
    {        
        printf("%d\n", i);
        long int i = 1; // Why doesn't redeclaration error?
        printf("%ld\n", i);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器不会生成重新声明变量i错误?

c gcc declaration

6
推荐指数
2
解决办法
877
查看次数

标签 统计

c ×3

c++ ×2

declaration ×2

for-loop ×2

gcc ×1