鱼C论坛

 找回密码
 立即注册

[技术交流] 初学者或是开发人员常遇到的c语言陷阱

  [复制链接]
发表于 2013-8-24 11:49:38 | 显示全部楼层
顶一下,不错不错....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-24 12:19:00 | 显示全部楼层
挺不错额的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-24 12:20:10 | 显示全部楼层
真的挺不错的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-24 23:16:31 | 显示全部楼层
楼主辛苦了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-25 00:14:01 | 显示全部楼层
很好  谢谢  我会用心的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-1 19:51:24 | 显示全部楼层
归纳的挺详细的,不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-2 10:03:30 | 显示全部楼层
根据您的陷阱3中提到的
如果是for循环,跟if一样,事与愿违,循环做无用功,本想循环的printf语句只执行一次。for(int a=1;a<10;a++);printf("%d",a);程序只输出一次a值。

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

  2. void main(){
  3.         for(int a = 1; a < 10; a++);
  4.         printf("%d\n", a);
  5. }
复制代码
输出结果是10
我想问的是,int a = 1;
定义变量是在for内,为什么能被for外识别?
这是C的不同吗?
因为我之前学JAVA的,求指路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

我的代码片段
  1. #include <stdio.h>

  2. void main(){
  3.         for(int a = 1; a < 10; a++);
  4.         printf("%d\n", a);
  5. }
复制代码
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之外是不可以被引用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-2 11:01:36 | 显示全部楼层
好帖,我这些错误基本都犯过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-3 09:10:03 | 显示全部楼层
顶起来      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-8 07:26:07 | 显示全部楼层
支持支持加油谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-16 14:40:43 | 显示全部楼层
很好,很不错,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-25 16:09:42 | 显示全部楼层
:handshake很实用啊,确实有些碰到过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-25 16:24:55 | 显示全部楼层
好东西  收下了  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-25 16:26:45 | 显示全部楼层
好东西  收下了  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-1 22:22:47 | 显示全部楼层
激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-1 23:24:48 | 显示全部楼层

建议看看《C语言参考手册》这一本书噶,里面对C99和C89有详细的说明。。还有规范很重要,C语言里重来没有void main()这样的东西噶~:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-2 00:27:32 | 显示全部楼层
细节决定成败!不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-2 09:51:27 | 显示全部楼层
确实是容易犯的错误,以后要更小心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-6 15:15:17 | 显示全部楼层
好帖,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 20:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表