愤怒的小鸡 发表于 2013-8-24 11:49:38

顶一下,不错不错....

play_C 发表于 2013-8-24 12:19:00

挺不错额的

play_C 发表于 2013-8-24 12:20:10

真的挺不错的。。。

a13106781 发表于 2013-8-24 23:16:31

楼主辛苦了。

网络学习 发表于 2013-8-25 00:14:01

很好谢谢我会用心的

snailqiu 发表于 2013-9-1 19:51:24

归纳的挺详细的,不错

懒家大少 发表于 2013-9-2 10:03:30

根据您的陷阱3中提到的
如果是for循环,跟if一样,事与愿违,循环做无用功,本想循环的printf语句只执行一次。for(int a=1;a<10;a++);printf("%d",a);程序只输出一次a值。

我特地试了一下#include <stdio.h>

void main(){
        for(int a = 1; a < 10; a++);
        printf("%d\n", a);
}输出结果是10
我想问的是,int a = 1;
定义变量是在for内,为什么能被for外识别?
这是C的不同吗?
因为我之前学JAVA的,求指路

懒家大少 发表于 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之外是不可以被引用的

且行且止 发表于 2013-9-2 11:01:36

好帖,我这些错误基本都犯过

宝宝吃肉 发表于 2013-9-3 09:10:03

顶起来      

h2323734288 发表于 2013-9-8 07:26:07

支持支持加油谢谢

吴凌 发表于 2013-9-16 14:40:43

很好,很不错,学习了

Tims 发表于 2013-9-25 16:09:42

:handshake很实用啊,确实有些碰到过

czd123 发表于 2013-9-25 16:24:55

好东西收下了谢谢

czd123 发表于 2013-9-25 16:26:45

好东西收下了谢谢

G0398 发表于 2013-10-1 22:22:47

激动人心,无法言表!

星之陨 发表于 2013-10-1 23:24:48

懒家大少 发表于 2013-9-2 10:21 static/image/common/back.gif
楼主,
关于我说的陷阱3
如果是for循环,跟if一样,事与愿违,循环做无用功,本想循环的printf语句只执行 ...

建议看看《C语言参考手册》这一本书噶,里面对C99和C89有详细的说明。。还有规范很重要,C语言里重来没有void main()这样的东西噶~:sweat:

960023815 发表于 2013-10-2 00:27:32

细节决定成败!不错

chq220 发表于 2013-10-2 09:51:27

确实是容易犯的错误,以后要更小心

慢半拍 发表于 2013-10-6 15:15:17

好帖,{:5_109:}{:5_109:}
页: 1 2 [3] 4 5 6 7 8
查看完整版本: 初学者或是开发人员常遇到的c语言陷阱