for里面的定义是重复定义还是重复声明?
#include <stdio.h>
int main(void)
{
int a = 3;
int i = 0;
for(i = 0; i < 3; i++)
{
if(i == 0){
int a=5;
}
printf("%d\n",a);
}
return 0;
}
1 你觉得打印的a是多少呢?
2 为什么我把if(i == 0) {}中的“{}”去掉了就编译通不过?
3 你觉得是for循环中的a是定义1次,声明了3次,还是定义了3次呢? 定义,嵌套 C
[解决办法]
至少现在的C/C++里。if里的a和printf用的a不是一个a。a被定义了一次(编译时)初始化了三次(运行时)。
[解决办法]
必然是3个3.
for(i = 0; i < 3; i++)
{
if(i == 0){
int a=5;
}
printf("%d\n",a);
}
这里面a作为一个堆栈变量,每次遇到大括号就会释放。所以对printf来说是看不到a的。
其次,如果去掉大括号,是可以的。因为它和最前面定义的a不在一个作用域内。可能是你编译问题。
建议看看编译器查找变量名的方式。
[解决办法]
该程序存在一个代码块作用域的问题,if(i==0){int a=5;}中定义的a是具有代码块作用域的局部自动变量,即它只在该代码块内可见,一离开该代码块即被释放,所以该程序打印的a值为3,打印3次。而把if后面的{}去掉,在一些老式编译器里确实会出错,建议用其他的编译器。
[解决办法]
你的编译器可能有些老了,刚才使用gcc编译无误。不是所有的编译器都支持c的所有特性的,何况是旧的编译器。