|
发表于 2013-9-2 10:21:30
|
显示全部楼层
楼主,
关于我说的陷阱3
如果是for循环,跟if一样,事与愿违,循环做无用功,本想循环的printf语句只执行一次。for(int a=1;a<10;a++);printf("%d",a);程序只输出一次a值。
我上百度问人了
别人说的答案是要看标准,标准不一样,情况不一样,以下是百度收集的答案
http://zhidao.baidu.com/question/587907634.html?sort=6#answer-1472054668
我的代码片段- #include <stdio.h>
- void main(){
- for(int a = 1; a < 10; a++);
- printf("%d\n", a);
- }
复制代码 NO.1
一种语言的编译器只要能支持90%这种语言就不错了,虽然在正常的for(int i)这种定义,只在for内有效,但是,在不同的编译器中是不一样的,
如果你用的是VC6.0就可以通过,如果是VS2008以上版本的编译器就会报错,
这是VC6.0编译器进行优化了的原因,使得a的作用域大于for循环域
NO.2
这段代码根据C89标准是不可以编译的
根据C99或者C++标准是可以编译的
可以编译的情况下 变量a数据main的局部变量
而不是for内的局部变量
对于for语句,写在for循环体内的才是for的局部变量
for(;;)
{
int loc;
}
这里的loc才是局部变量
这个loc在for之外是不可以被引用的 |
|