免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 塑料袋
打印 上一主题 下一主题

争论C概念正确性的一般路子是什么? [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
131 [报告]
发表于 2012-06-04 10:20 |只看该作者
回复 130# mirnshi


    因为有些人就是爱写连标准都不满足的代码呗~~~对于做事来说,标准啥都不能干,但是对于本来就啥都不能干的代码来说,标准是最低的一条底线嘛。

这就是理论研究和实践的区别了嘛~~

看BSD的代码和GNU的代码你就明白了……

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
132 [报告]
发表于 2012-06-04 10:24 |只看该作者
starwing83 发表于 2012-06-04 10:20
回复 130# mirnshi

对于做事来说,标准啥都不能干,但是对于本来就啥都不能干的代码来说,标准是最低的一条底线嘛。


我还以为对于做事的代码来讲, 标准是最高的要求呢

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
133 [报告]
发表于 2012-06-04 10:46 |只看该作者
starwing83 发表于 2012-06-04 10:20
回复 130# mirnshi


很少写二义性的代码。不符合标准的代码能过编译器这一关吗?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
134 [报告]
发表于 2012-06-04 10:55 |只看该作者
回复 133# mirnshi


    能。因为编译器是一个具体的实现,而具体的实现总会给你一个结果(编译器崩溃啊,给你一个错误的结果啊,给你一个正确的结果啊,或者根本不给你结果啊神马的),只要写编译器的人不抽风,这个结果对这个版本的编译器来说就是一定的。然而标准却可能根本就没规定这个行为。意思是虽然总的来说,遵守标准的代码基本上做不了事情。但是如果你完全不理标准,就意味着你开着一辆没有保险带的车,随时都有生命危险。标准起到一个保险带的作用。告诉你这个行为是没定义的。至于没定义的结果怎样,这个结果对你来说有没有用,是你说了算的。比如说,你就天天在城里的柏油马路上开车,而且所有的车限速40,恐怕也不会有人sb到天天都系安全带。但是如果你是在高速公路上嘛……

城里的柏油马路类比你自己的,确定的项目,而高速公路类比了以后未知的需求。万一你的代码要被移植到其他的编译器或者系统(比如你依赖的一个库有个高性能版本,而那个版本需要版本更高的编译器),你就危险了。如果你预料之中绝对不会出现这种情况,你不系安全带也是可以的。

论坛徽章:
0
135 [报告]
发表于 2012-06-04 11:02 |只看该作者
本帖最后由 wwwsq 于 2012-06-04 11:03 编辑
mirnshi 发表于 2012-06-04 10:46
很少写二义性的代码。不符合标准的代码能过编译器这一关吗?



标准明确定义的东西,一般都能过编译器(少数特例另算,实际上没有哪个编译器完全实现了所有C标准)。

标准明确反对的东西,一般都不能过编译器。

标准未定义的东西,有些能过编译器,有些不能过编译器。
有些事实标准的东西,比如#pragma once在vc/gcc这些主流编译器上都已经支持,但尚未纳入C标准。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
136 [报告]
发表于 2012-06-04 11:22 |只看该作者
符合标准的C代码更易被不同的编译器接受,而且不同编译器编译后获得相同结果的概率要比不符合标准的代码大得多。

论坛徽章:
0
137 [报告]
发表于 2012-06-04 11:27 |只看该作者
符合标准是可移植的必要条件吧。

不符合标准的代码,可能编译器升级一下都会有问题,除非这个问题太普遍,代码又太重要以至于法不责众,只好编译器迁就实现。

至于预处理的那些东西,很多都是方言。但是那东西本身就是用来对语言进行移植的,所以也无所谓。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
138 [报告]
发表于 2012-06-04 11:28 |只看该作者
回复 132# zylthinking


    不是闲的蛋疼谁去追求标准兼容?赶快事情做完了拿到工资了事

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
139 [报告]
发表于 2012-06-04 11:39 |只看该作者
starwing83 发表于 2012-06-04 10:55
回复 133# mirnshi

对于不符合标准的,居然能被编译器认可,很好奇,能给些例子吗?

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
140 [报告]
发表于 2012-06-04 11:41 |只看该作者
sonicling 发表于 2012-06-04 11:27
符合标准是可移植的必要条件吧。

不符合标准的代码,可能编译器升级一下都会有问题,除非这个问题太普遍 ...

方言并不是“不符合标准的代码”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP