打印

我滴个神啊!这样子也可以?见38楼新进展

[复制链接]
楼主: XIANSir
手机看帖
扫描二维码
随时随地手机跟帖
61
我和你一样,强烈谴责编译器,支持你,去投诉去

使用特权

评论回复
62
XIANSir|  楼主 | 2011-3-18 16:05 | 只看该作者
60# wzf3151
偶!原来是用的PIC编译器啊!我误会前辈了。

前辈也把编译结果和程序的截图发上来吧,希望更多的人在更多的编译器上进行验证,并把截图发上来,看看这些编译器都是怎么处理的!!!

使用特权

评论回复
63
dqyubsh| | 2011-3-18 16:10 | 只看该作者
准备开口谴责别人的时候,问一下自己为什么不能养成一个好习惯。

代码是给人看的,不是给编译器看的,也是给机器看的。10几年前的书上就是这样说的。

使用特权

评论回复
64
john_lee| | 2011-3-18 16:10 | 只看该作者
这个仙sir还真有意思,知道怎么回事就得了吧,还纠缠不清了,时间太多了?

使用特权

评论回复
65
wzf3151| | 2011-3-18 16:19 | 只看该作者
你写代码能一点错都不犯?而且看来楼主发现的问题的确编译器该承担一点责任的。楼主,要点记念品,还不让白娘子的老公自豪一下?我就喜欢爱挑刺的 63# dqyubsh

使用特权

评论回复
66
XIANSir|  楼主 | 2011-3-18 17:13 | 只看该作者
63# dqyubsh
人难免犯错,像语法检查这样的重复性机械劳动肯定应该要编译器来做呀,要不然电脑要那么高的性能干什么啊,事事都由人来做,那用386就可以啦!

而且,编译器这种东西,对我们编程者至关重要!我认为对其再怎么求全责备都不为过。

好习惯当然要养成,但是写了十年代码的人,在编程时忘记写分号这种事情也不是什么世界奇迹!

使用特权

评论回复
67
XIANSir|  楼主 | 2011-3-18 17:20 | 只看该作者
64# john_lee
我不仅想知其然,更想知其所以然——这也是我为什么选择单片机编程而不选择桌面PC应用编程的一个重要原因,我希望获得对自己开发的产品的尽可能多的控制!

而且,通过尽可能多的了解高手的发言,我可以学到更多的东西,高手发言,可以学到很多书本上学不到的东西。

另外,说道时间太多,其实我今天特别的忙,但是我尽最大努力的在每一个间隙来回复大家的发言。一方面,问了问题,却不给答问者反馈,我认为是很不礼貌的;另一方面,我发言越多,高手发言的可能性就越大,这也是我“逼迫”高手向我传授知识的一种手段:lol

使用特权

评论回复
68
XIANSir|  楼主 | 2011-3-18 17:25 | 只看该作者
65# wzf3151
呵呵,大侠真聪明!
说道纪念品,其实我会在我发的每一个我认为有意义的帖子中尽可能多的让高手发言,留下他们的真知灼见,以及自己的学习和思维过程。然后,我会把这些帖子全部下载下来并保存起来,我认为这是我最宝贵的财富和纪念品。遇到相似的问题,我会拿出它们来查看,这样随着时间的流逝,必将能够学到更多的比“答案”本身更珍贵的东西。

使用特权

评论回复
69
liang7143| | 2011-3-19 14:49 | 只看该作者
刚刚发现这样定义一个变量 也没有警告~~

unsigned temp;

使用特权

评论回复
70
new1988| | 2011-3-19 16:34 | 只看该作者
给你个更吓人的!!
int a[10];
int b;
c[10];
d;
f(x)
{
      return x;
}

一样的不报错,不出警告。  这叫隐式声明。

使用特权

评论回复
71
XIANSir|  楼主 | 2011-3-19 16:36 | 只看该作者
69# liang7143
这个虽然没有把实际使用的类型unsigned int写全,但是毕竟写了变量的类型。而我上面提出的现象是根本就没有写类型关键字。
二者应该还是有不小的区别的吧。

而且,我猜这个在绝大多数C编译器甚至是C++编译器上都不太可能产生警告!!

使用特权

评论回复
72
XIANSir|  楼主 | 2011-3-19 16:45 | 只看该作者
70# new1988
刚刚试了一下,果然一个警告都没有:



不过前辈,你应该也不会向新手推荐这样写程序吧?要是你手下有人这样写程序,你是听之任之呢,还是会给他好好上上课呢?;P

使用特权

评论回复
73
XIANSir|  楼主 | 2011-3-19 17:10 | 只看该作者
本帖最后由 XIANSir 于 2011-3-19 17:13 编辑

int a[10];
int b;
c[10];
d;
f(x)
{      return x;
}
int main()
{         f(10);
}
--------------------------------------------------------------------------------------------------
下面是对以上代码进行的一个编译测试报告:
1、WINAVR+TKStudio   C语言标准设定为C89或GNU89:

2、WINAVR+TKStudio C语言标准设定为C99或GNU99:

3、Keil C51:

4、ARM MDK:

5、VC 2008(警告级别设为3):

6、VC 2008(警告级别设为4):

其实我所希望Keil有的就是VC这样的功能,通过设定不同的警告级别来解决我碰到的问题。而且从WINAVR和VC2008也可以看出来,新的C语言标准不鼓励使用default int这个古老的C语言特性。

使用特权

评论回复
74
XIANSir|  楼主 | 2011-3-19 17:16 | 只看该作者
另外,顺便抱怨一下21IC:
为什么21IC网站不遵守HTML相关标准,搞的我稍微复杂一点的回复在谷歌浏览器下就没**确输入,不得不特地打开IE浏览器来修改回复。:'(

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则