免费注册 查看新帖 |

Chinaunix

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

[C] 请教一个基础问题——数组名减1是否可以 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
61 [报告]
发表于 2009-12-17 13:10 |只看该作者

回复 #60 zx_wing 的帖子

我也觉得这帖早就可以结了 —— 从标准被翻出来之时。


而且我并不觉得我的理解

如果存在某种编译器。
即使它使得:
int a[2];
a - 1;

执行crash的动作,在这点上, 它依然是符合标准的。

有任何问题。 标准在这里本身就说的是undefined ,那编译器自然想做什么就做什么。


而你在33楼引用的内核代码, 我觉得根本不能说明任何问题。
1. 首先, linux内核代码只是有"广泛"的移植性, 而不是"所有"。
2. 其次, linux内核代码是gcc代码, 不是C代码。

只是觉得在这种问题上和你争论下去没什么必要。




再者, 对待标准的态度。
C语言标准描述的是一种机器, 某个C语言实现描述的也是一种机器。
赞扬任何一方而排除另一方都是没有必要的。
并且, 也应该以前者为优先 : 在前者能够完成工作的情况下, 就不必考虑后者。
只有在仅仅使用前者提供的功能无法实现, 或者无法高效实现时, 才有必要考虑后者提供功能。

就像我在31楼举的例子。 既然标准提供了stdarg.h, 那么,就应该优先使用stdarg.h, 而不是用 int* 去猜测参数的位置。
既然标准说越界(即使不访问)也是未定义行为,那么, 除非有充足的理由, 就不应该写出:
int a[2];
a - 1;
这样的代码。

论坛徽章:
0
62 [报告]
发表于 2009-12-17 13:26 |只看该作者

回复 #61 OwnWaterloo 的帖子

“linux内核代码是gcc代码, 不是C代码”
什么意思?
“C语言标准描述的是一种机器, 某个C语言实现描述的也是一种机器。”
什么意思?

[ 本帖最后由 论坛热点 于 2009-12-17 13:27 编辑 ]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
63 [报告]
发表于 2009-12-17 13:29 |只看该作者
编译器怎么会保证数组不溢出呢???

具体的平台具体去分析,标准只是告诫你这样做也许会有问题,但没有强制你不能这么做

zx_wing知识面很广,佩服

论坛徽章:
0
64 [报告]
发表于 2009-12-17 13:32 |只看该作者
原帖由 chenzhanyiczy 于 2009-12-17 13:29 发表
编译器怎么会保证数组不溢出呢???

具体的平台具体去分析,标准只是告诫你这样做也许会有问题,但没有强制你不能这么做

zx_wing知识面很广,佩服

OwnWaterloo的知屎面也很广呀

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
65 [报告]
发表于 2009-12-17 13:33 |只看该作者

回复 #62 论坛热点 的帖子

晕……   随意的一句话引出了一艘下潜1年多的潜水艇

准确的说,linux内核代码使用的是gcc方言,而不是C语言。
linux内核代码不排斥gcc对C语言的扩展, 比如typeof。

再解释一下啊, 免得被其他内核爱好者喷……
说linux内核代码是gcc代码并没有不敬的意思。
linux内核代码是如此的牛逼,那它选择gcc而不是C自然有它的充足的理由。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
66 [报告]
发表于 2009-12-17 13:35 |只看该作者

回复 #63 chenzhanyiczy 的帖子

去补习一下语言学或者逻辑学

论坛徽章:
0
67 [报告]
发表于 2009-12-17 13:36 |只看该作者
原帖由 OwnWaterloo 于 2009-12-17 13:33 发表
linux内核代码是如此的牛逼,那它选择gcc而不是C自然有它的充足的理由。


什么充足的理由?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
68 [报告]
发表于 2009-12-17 13:39 |只看该作者

回复 #67 论坛热点 的帖子

我不是内核爱好者, 你得找他们来回答这个问题

论坛徽章:
0
69 [报告]
发表于 2009-12-17 13:49 |只看该作者
原帖由 OwnWaterloo 于 2009-12-17 13:39 发表
我不是内核爱好者, 你得找他们来回答这个问题

知不知道这个理由和是不是“内核爱好者”没关系吧

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
70 [报告]
发表于 2009-12-17 13:54 |只看该作者

回复 #69 论坛热点 的帖子

你是想在我这里通过图灵测试, 对么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP