免费注册 查看新帖 |

Chinaunix

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

sizeof有关问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-04-26 12:04 |只看该作者
如果可以找出一个编译器(有人用的编译器)不是这么解释的话,那么的确应该注意,可惜的是现在的编译器都是这么解释的。
C陷阱与缺陷的作者那么多年工作经验都认为是编译器就这么干
编译器的行为也是要关注的,只要能做出产品的程序员就是好程序员
只捧着那些C标准一直看,始终关注着那些用不到的细节和碰不到的例外的程序员,不是好程序员回复 17# pmerofc


   

论坛徽章:
0
22 [报告]
发表于 2012-04-26 12:12 |只看该作者
回复 20# pmerofc

结合性从右向左——没有问题。

至于优先级——

我一直认为用“优先级”来解释 C 中的表达式是不合适的,尤其是涉及到一元运算符的时候。

理由很简单,如果表达式只能由(前缀)一元运算符构成,那么优先级完全没有意义。因为不管用什么顺序组合得到的结构都是唯一的。

如果表达式只由二元运算符构成,那么优先级的意义很直观:总是可以先拿出优先级最高的那些运算符按照结合性指定的方向进行规约,解析过程总能正确终止。

如果既有一元运算符又有二元运算符,就很难得出明显的语义。还是这个 sizeof 的例子:

sizeof ( int ) * p

假设 (int) 作为运算符的优先级比 sizeof 和 * 都低,那么如果按照“首先规约高优先级运算符”的规则:

( sizeof ( int ) ) * p
( sizeof ( int ) ) ( * p )

然后呢?没有然后了……

当然我们可以说这里必须后退一步,将 * 视为乘法而不是解引用。可是凭什么?面对更复杂的表达式怎么办?

要利用优先级和结合性把这些东西严格定义出来,虽然可能,但肯定不如现有的基于 BNF 的定义简单、直观。因此,要深入理解 C 的表达式结构,就不应该纠结于优先级和结合性,应该直接上 BNF。我一直是这么认为的。

论坛徽章:
0
23 [报告]
发表于 2012-04-26 13:13 |只看该作者
本帖最后由 x5miao 于 2012-04-26 13:19 编辑

回复 21# 郁闷饿

遵守规范和做不做得出产品完全是两个概念,不要搅在一起比较。

    你写的代码不规范,像google这种公司都不让你提交代码,在一些好的公司的笔试中代码规范占的比分比程序结果更重要。另外你说所有的编译器都是这样,请问你如何证明?gcc+cl就是所有的编译器了?就算今天的编译器都是这个结果你就能确保以后的编译器都是这个结果。标准是干嘛的?它就是用来约束编译器的。

觉得遵守规范没有做出产品重要的估计是没接触过大型项目

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
24 [报告]
发表于 2012-04-26 13:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
25 [报告]
发表于 2012-04-26 13:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
26 [报告]
发表于 2012-04-26 13:55 |只看该作者
遵守规范和死磕没用的理论是两码事,请你不要混在一起
还有你说我没做过大项目,如果你能从你的大项目中找出一行sizeof(int) * p 还考虑到二义性从而改变写法的语句的话,你再来说你的规范吧回复 23# x5miao


   

论坛徽章:
0
27 [报告]
发表于 2012-04-26 13:56 |只看该作者
强辩而已,那第101个编译器有人用?回复 25# pmerofc


   

论坛徽章:
0
28 [报告]
发表于 2012-04-26 14:00 |只看该作者
或者说如果你能在你的大项目中找出任何一行因为怕编译器不是使用贪心法而写出的语句吗?
为了那个专家所谓的第101个编译器而写出的语句?回复 23# x5miao


   

论坛徽章:
0
29 [报告]
发表于 2012-04-26 14:06 |只看该作者
本帖最后由 x5miao 于 2012-04-26 14:11 编辑

回复 28# 郁闷饿


    前面已经有人和你说过吧,编译器没有什么贪心法的东西。  你说的是确定记号时用最长有效记号原则那个东西吧,那不叫贪心法。


至于sizeof,如果不看标准,你怎么确定6楼说的不对?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
30 [报告]
发表于 2012-04-26 14:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP