打印

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

[复制链接]
楼主: XIANSir
手机看帖
扫描二维码
随时随地手机跟帖
41
先不管c语言、做为编译器,我个人认为应该考虑周到,多点警告是个好事!!!!

使用特权

评论回复
42
wzf3151| | 2011-3-18 10:31 | 只看该作者
楼主,我支持你的怀疑精神。我帮你在我的编译器上做了测试,结果是给出警告。我的编译器是microchip的c30。

未命名.JPG (140.96 KB )

未命名.JPG

使用特权

评论回复
43
wzf3151| | 2011-3-18 10:34 | 只看该作者
我也倾向与给出警告。楼上所有的反对声音除了说c标准就是那么规定的之外并没看到其他什么过硬的理由。
难道给出了警告就违反了C标准了吗?违反了C标准我想那就不是给警告了,就直接给出了错误了,编译不过。

使用特权

评论回复
44
wzf3151| | 2011-3-18 10:40 | 只看该作者
对,这就是两个问题,c语言仅仅是规定了一些语法规则,编译器多给些警告和他有什么关系?多给点有好处,我就喜欢用。 41# qymcs

使用特权

评论回复
45
hotyong| | 2011-3-18 11:05 | 只看该作者
C有那么个标准,那肯定会有人省略(申明下:我不会),那这样的话,你出来个警告, 那么这部分人也会觉得不爽啦。。。
其实要避免这种问题不是很简单吗,自己定义个类型取代static不就完了

使用特权

评论回复
46
XIANSir|  楼主 | 2011-3-18 11:46 | 只看该作者
45# hotyong
不仅仅是警告!还有错误!见38楼!


我认为ARM编译器的处理方式要比C51编译器好的多!

使用特权

评论回复
47
john_light| | 2011-3-18 11:46 | 只看该作者
“标准”就是一个行业的游戏规则,它照顾了一般性,势必要排除了一些个性。不管你认为自己如何牛,要进入某行业就必须遵循标准,否则都会乱套。

当然,标准也有修订的时候,不过你要相信一个长时间锤炼出来的标准有它自己的道理。

使用特权

评论回复
48
wzf3151| | 2011-3-18 11:55 | 只看该作者
38楼的错误是违反了C语言标准的。违反标准给错误,没违反标准但是可能存在非作者本意的东西给警告 46# XIANSir

使用特权

评论回复
49
XIANSir|  楼主 | 2011-3-18 12:02 | 只看该作者
48# wzf3151
那你是说C51编译器不遵守C语言标准了??

同样的代码,ARM编译器就报告错误,C51编译器连个警告都没有。

当然,我支持ARM编译器的做法!

使用特权

评论回复
50
wzf3151| | 2011-3-18 12:05 | 只看该作者
难道你没注意到38楼的错误和警告是不一样的吗?你把程序放到C51下编译,你的那个错误照样出现,最多那个警告没了

使用特权

评论回复
51
XIANSir|  楼主 | 2011-3-18 12:16 | 只看该作者
50# wzf3151
难道你没发现38楼中的图片中已经用C51编译了那个代码了吗??
不信的话,你可以自己编译一下嘛!

使用特权

评论回复
52
sdpz| | 2011-3-18 12:49 | 只看该作者
难道 bdata,idata,xdata 遵循了C语言标准?
难道 bit, sbit 遵循了C语言标准?
static tmp也好,signed tmp也好,它们的存在有错吗?

使用特权

评论回复
53
XIANSir|  楼主 | 2011-3-18 13:09 | 只看该作者
52# sdpz
C语言规范里面没有的内容,当然不需要遵守——因为那是编译器开发者自己加进去的,他们自己就是标准。

C语言规范里面有的内容,当然就得遵守了。

而且,根据38楼的现象,结论应该是:Keil C51遵守了规范,而ARM编译器没有遵守规范。

但是,我倾向于支持ARM编译器的做法,因为它的做法更能保证代码的正确性和可靠性。

使用特权

评论回复
54
XIANSir|  楼主 | 2011-3-18 13:12 | 只看该作者
我想是不是这样子的:C89标准支持default int ,而更新的C99标准不再支持default int 特性。

而KeilC51遵循C89,ARM编译器遵循C99。

仅是个人猜测,待高人验证!

使用特权

评论回复
55
wzf3151| | 2011-3-18 13:37 | 只看该作者
但是你那个错误和警告是不同性质的,警告是变量被static声明,但是没有声明类型,所以给出警告,而那个错误是变量压根没有声明,c标准是不允许变量不声明的。所以一个错误一个警告。你后面验证已经把问题性质改变了。
而且我怀疑你没有打开keil c的某个警告开关,否则会出警告。 51# XANSir

使用特权

评论回复
56
SuperX-man| | 2011-3-18 13:53 | 只看该作者
发现各位一直都在长时间的讨论这个问题,但是忽略了一个根本问题....编译器也是人编的.....
这些缺失完全可以通过补丁的方式在升级中弥补(window都补到现在了)....这些编译器无非就是把你的C变成汇编和机器码....目的是一致的.无非途径有差异而已.
而你的疑惑应该找写你编译器的人去投诉.而不是泛泛说.
就如同你做国航去北京,旅途不舒服.就觉得做飞机去北京不舒服,面就太广了.
选你喜欢的,做你适合的,至于疑惑投诉什么的...找对目标.....

使用特权

评论回复
57
XIANSir|  楼主 | 2011-3-18 14:15 | 只看该作者
55# wzf3151
而那个错误是变量压根没有声明,c标准是不允许变量不声明的”


请你再仔细看看38楼的图片,对于您认为的那个错误,Keil C51连个警告都没有给出,更别说报错了。

你可以自己编译一下看看的,就那么几行代码,不复杂吧?

使用特权

评论回复
58
wzf3151| | 2011-3-18 14:20 | 只看该作者
哦,那你的编译器真有问题,我的没有问题。你再去投诉要点奖品

使用特权

评论回复
59
XIANSir|  楼主 | 2011-3-18 15:24 | 只看该作者
58# wzf3151
前辈啊!
程序很简单,只有几行而已,你建一个工程测试一下不就知道了吗??

如果你的Keil C51编译器报错或者警告,你可以把截图发上来嘛!

算了,我把工程也发上来,你下载编译一下好吧??

这是我的工程,有软件的可以下载下来编译一下看看——我还不至于拿这种事情骗大家的:
ARM51Tst.rar (21.98 KB)
下面是我用的ARM和C51的版本:



使用特权

评论回复
60
wzf3151| | 2011-3-18 15:58 | 只看该作者
就是你的编译器太差,我的是该报错得报错,该警告的警告。我用的不是keil,我的是PIC c30编译器

使用特权

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

本版积分规则