免费注册 查看新帖 |

Chinaunix

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

[C] 有多少C程序员认为这是错误的写法 [复制链接]

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
431 [报告]
发表于 2012-09-04 23:51 |只看该作者
笑而不语 ,

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
432 [报告]
发表于 2012-09-04 23:57 |只看该作者
回复 431# __BlueGuy__

又被我看到了。

OwnWaterloo 发表于 2012-08-18 13:24
有什么你语出来。除了C、OO你还语得出什么?别装得很懂懒得说的样子。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
433 [报告]
发表于 2012-09-05 00:03 |只看该作者
回复 395# Ager

关于荒唐,再解释一下。
是说"因为p[x]与*(p+x)产生了不同的汇编代码所以它们是不等价的"这种逻辑荒唐。
因为按照这种逻辑,相同表达式产生了不同汇编代码(这种情况很普遍)就可以推出相同表达式也是不等价的。
关于什么是人生攻击,我记得那帖就是你发的吧?


最近有点忙没上线,看到:http://bbs.chinaunix.net/thread-3769192-1-1.html 觉得有必要分享一下,于是上了个线。
profiling对优化性能还是很有指导意义的。
回复时有点匆忙没太注意遣词造句,希望不要引起误会。。。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
434 [报告]
发表于 2012-09-05 00:20 |只看该作者
OwnWaterloo 发表于 2012-09-04 23:57
回复 431# __BlueGuy__

又被我看到了。

其实, 我 java / c++ 都会的, 而且比 c 还会的多一点,

论坛徽章:
0
435 [报告]
发表于 2012-09-05 00:34 |只看该作者
回复 433# OwnWaterloo


    虽然我认为 无论如何 E1[E2] 的效率不可能低于 *(E1+(E2)),
    但语义层面的等价确实不一定蕴含效率相同啊

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
436 [报告]
发表于 2012-09-05 01:18 |只看该作者
回复 435# hbmhalley

代码等价 -> 效率相同 —— 这里确实不存在逻辑关联。
但等价代码去纠结效率就没意义了。

而且还不是reference vs pointer,局部变量=匿名函数立即调用这种人为推出来的语义等价(ref与ptr还真不等价)。
而是语言spec写得清清楚楚的,一种形式就是通过另一种形式定义的,两种形式转化也不复杂
如果一种形式比另一种形式效率低了,应该做的是换编译器或编译器参数,而不是去改代码。
代码只有一份,如果有两款编译器对两种形式产生的效率是相反的,怎么斥候得过来? 难道还要去条件编译吗?


就连++j, p[j] vs ++p, *p 这种语义不等价(前者多一个加法)的,都提倡尽量少去追究,何况p[x] vs *(p+x)。
最开始也只是说那货把例子记错了。
《深入理解计算机系统》要真的是在纠结[x] vs *(p+x)这种问题,这书也没什么价值了。

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
437 [报告]
发表于 2012-09-05 04:36 |只看该作者
本帖最后由 Ager 于 2012-09-05 04:39 编辑

@OwnWaterloo

@hbmhalley

@pmerofc

OwnWaterloo 发表于 2012-09-04 22:55
回复 395# Ager

幸好我有拍照过,就p[x]与*(p+x)这事的来龙去脉在 104# 楼。

    Array subscripting, Semantics

    A postfix expression followed by an expression in square brackets [] is a subscripted designation of a member of an array object.
    The definition of the subscript operator [] is that E1[E2] is identical to (*(E1+(E2))) .


p[x]就是根据*(p+x)定义的。

你遇见过"完全相同的表达式被编译为不同的汇编代码"这种情况没有?
按你的说法,因为它们产生的汇编代码不同,所以两个表达式是不等价的?即使两个表达式完全相同?荒唐。


冤枉 …… ow大虾莫怒 ……

大虾 …… 我在上面不是说了嘛 —— “等价”的观念又该如何理解?被比较的两方,将在哪一个层面上被做关于“等价”的判断?

我觉得吧,像我这种(不代表更多的人)玩(不是用也不是开发更不是对其做学术)计算机的人,reading、programming和hacking的乐趣,就是在于挖掘看似平坦的叙事下被掩盖的泥沼与崎岖,发现看似“本来应该如此”下的“原来不是如此”。

在大虾上列的引文中,“be identical to”到底是什么意思?我是不甘心按照惯常叙事的语境势态,去被迫接受一个概念的;就算去查考词源(identical一词有“被视为等同”的含义,有亲缘义的词有“identifier”(标识符)等)也无法轻易挥去我的疑虑;上列引文的标题,虽然已经明示了“Semantics”这个前提,但这实际上令它要陈述的事情离我所关心的东西更远了。

所以,如果我有能力与技巧,去亲手揭示出“be identical to”这件事情,到底是发生在哪一个环节(或哪一个层面)的,我就觉得很开心了 —— 这不是“扣字眼”的乐趣,也是一种亲自经历了我原来未曾经历的事情的乐趣。比如,ow大虾你在本帖第88楼的发言,我就很喜欢(特地mark了)。

OwnWaterloo 发表于 2012-09-05 00:03
回复 395# Ager

关于什么是人生攻击,我记得那帖就是你发的吧?


ow大虾,不明白你的这句话 …… {:3_185:}

论坛徽章:
0
438 [报告]
发表于 2012-09-05 09:05 |只看该作者
回复 437# Ager


    我发的 ..
    http://bbs.chinaunix.net/thread-3766551-1-1.html

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

论坛徽章:
0
440 [报告]
发表于 2012-09-05 09:23 |只看该作者
回复 436# OwnWaterloo


    哦. got it.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP