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

[复制链接]
13460|73
qymcs 发表于 2011-3-18 10:27 | 显示全部楼层
先不管c语言、做为编译器,我个人认为应该考虑周到,多点警告是个好事!!!!
wzf3151 发表于 2011-3-18 10:31 | 显示全部楼层
楼主,我支持你的怀疑精神。我帮你在我的编译器上做了测试,结果是给出警告。我的编译器是microchip的c30。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
wzf3151 发表于 2011-3-18 10:34 | 显示全部楼层
我也倾向与给出警告。楼上所有的反对声音除了说c标准就是那么规定的之外并没看到其他什么过硬的理由。
难道给出了警告就违反了C标准了吗?违反了C标准我想那就不是给警告了,就直接给出了错误了,编译不过。
wzf3151 发表于 2011-3-18 10:40 | 显示全部楼层
对,这就是两个问题,c语言仅仅是规定了一些语法规则,编译器多给些警告和他有什么关系?多给点有好处,我就喜欢用。 41# qymcs
hotyong 发表于 2011-3-18 11:05 | 显示全部楼层
C有那么个标准,那肯定会有人省略(申明下:我不会),那这样的话,你出来个警告, 那么这部分人也会觉得不爽啦。。。
其实要避免这种问题不是很简单吗,自己定义个类型取代static不就完了
 楼主| XIANSir 发表于 2011-3-18 11:46 | 显示全部楼层
45# hotyong
不仅仅是警告!还有错误!见38楼!


我认为ARM编译器的处理方式要比C51编译器好的多!
john_light 发表于 2011-3-18 11:46 | 显示全部楼层
“标准”就是一个行业的游戏规则,它照顾了一般性,势必要排除了一些个性。不管你认为自己如何牛,要进入某行业就必须遵循标准,否则都会乱套。

当然,标准也有修订的时候,不过你要相信一个长时间锤炼出来的标准有它自己的道理。
wzf3151 发表于 2011-3-18 11:55 | 显示全部楼层
38楼的错误是违反了C语言标准的。违反标准给错误,没违反标准但是可能存在非作者本意的东西给警告 46# XIANSir
 楼主| XIANSir 发表于 2011-3-18 12:02 | 显示全部楼层
48# wzf3151
那你是说C51编译器不遵守C语言标准了??

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

当然,我支持ARM编译器的做法!
wzf3151 发表于 2011-3-18 12:05 | 显示全部楼层
难道你没注意到38楼的错误和警告是不一样的吗?你把程序放到C51下编译,你的那个错误照样出现,最多那个警告没了
 楼主| XIANSir 发表于 2011-3-18 12:16 | 显示全部楼层
50# wzf3151
难道你没发现38楼中的图片中已经用C51编译了那个代码了吗??
不信的话,你可以自己编译一下嘛!
sdpz 发表于 2011-3-18 12:49 | 显示全部楼层
难道 bdata,idata,xdata 遵循了C语言标准?
难道 bit, sbit 遵循了C语言标准?
static tmp也好,signed tmp也好,它们的存在有错吗?
 楼主| XIANSir 发表于 2011-3-18 13:09 | 显示全部楼层
52# sdpz
C语言规范里面没有的内容,当然不需要遵守——因为那是编译器开发者自己加进去的,他们自己就是标准。

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

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

但是,我倾向于支持ARM编译器的做法,因为它的做法更能保证代码的正确性和可靠性。
 楼主| XIANSir 发表于 2011-3-18 13:12 | 显示全部楼层
我想是不是这样子的:C89标准支持default int ,而更新的C99标准不再支持default int 特性。

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

仅是个人猜测,待高人验证!
wzf3151 发表于 2011-3-18 13:37 | 显示全部楼层
但是你那个错误和警告是不同性质的,警告是变量被static声明,但是没有声明类型,所以给出警告,而那个错误是变量压根没有声明,c标准是不允许变量不声明的。所以一个错误一个警告。你后面验证已经把问题性质改变了。
而且我怀疑你没有打开keil c的某个警告开关,否则会出警告。 51# XANSir
SuperX-man 发表于 2011-3-18 13:53 | 显示全部楼层
发现各位一直都在长时间的讨论这个问题,但是忽略了一个根本问题....编译器也是人编的.....
这些缺失完全可以通过补丁的方式在升级中弥补(window都补到现在了)....这些编译器无非就是把你的C变成汇编和机器码....目的是一致的.无非途径有差异而已.
而你的疑惑应该找写你编译器的人去投诉.而不是泛泛说.
就如同你做国航去北京,旅途不舒服.就觉得做飞机去北京不舒服,面就太广了.
选你喜欢的,做你适合的,至于疑惑投诉什么的...找对目标.....
 楼主| XIANSir 发表于 2011-3-18 14:15 | 显示全部楼层
55# wzf3151
而那个错误是变量压根没有声明,c标准是不允许变量不声明的”


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

你可以自己编译一下看看的,就那么几行代码,不复杂吧?
wzf3151 发表于 2011-3-18 14:20 | 显示全部楼层
哦,那你的编译器真有问题,我的没有问题。你再去投诉要点奖品
 楼主| XIANSir 发表于 2011-3-18 15:24 | 显示全部楼层
58# wzf3151
前辈啊!
程序很简单,只有几行而已,你建一个工程测试一下不就知道了吗??

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

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

这是我的工程,有软件的可以下载下来编译一下看看——我还不至于拿这种事情骗大家的:

下面是我用的ARM和C51的版本:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
wzf3151 发表于 2011-3-18 15:58 | 显示全部楼层
就是你的编译器太差,我的是该报错得报错,该警告的警告。我用的不是keil,我的是PIC c30编译器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部