| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1682 人关注过本帖
标题:字符串替换函数定义方式比较
只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 10楼 你们都要疼我哦
《c 算法》的作者 塞德威克 都说这样的代码烂,你有什么依据说他是凭空想像。
c++有可能会把这段代码作为内联函数来优化,   c 语言没有指明会有这种优化吧?

[ 本帖最后由 BlueGuy 于 2010-7-3 15:53 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-07-03 14:48
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 

我有说那个什么塞德威克凭空想象了么?
凭空想像我是说有人认为每次FOR循环都要计算一次长度,实际却不是。这是不是凭空想象呢?
怎么一下子就给我扣了顶大帽子 变成我说那个什么塞德威克凭空想象了?
再“烂”的代码,也不能凭空想象它的执行过程吧。
而且这种写法好读易懂,随便看看好多大型软件的源码,都有类似写法。没见过还
要再搞2个局部变量出来去赋值的。c里的这几个函数,你就算每个都这样搞,也问题不大,可是以后真正编码做软件的时候,该怎么样还要怎么样。说某段代码 烂不烂, 也是需要上下文环境的。
另外楼上对内联函数理解也不对吧,循环结构的判断条件里有函数,有被当成内联函数去优化的吧?
就算是说内联函数,c99也早就支持内联函数了,而且比c++更灵活。
循环结构只是个简单的比较跳转而已,即使是FOR,也仅仅多个步长,循环体内会尽可能的被优化,可以提取到循环体外的部分,都会提到外面去优化,判断条件也是,可以一次性计算得到固定值的,就不会多次重复计算,这是编译器的工作,不需要特别指定。

两个值去比较 然后根据结果跳转,一个值不断的自增或自减,另一个值则早在一开始就计算出结果保存在堆栈内,并不需要每次计算。很简单的一个问题 搞这么复杂。。。
况且楼主只是问两种方式哪种比较好些。

最后想说的是,从语言学习的角度,版主的引导方向及2楼写法都是完全正确的。
但是从实际使用上来讲,应该接受各种流行的写法和风格。
6楼和9楼的想象是有问题的。当然,这样想象对学习和使用无任何影响。
也很少有人去学习更底层的知识。。。
这样的问题,OD下一目了然。

哎 打字累坏了。俺再也不来这里乱逛了,打字太累太累




小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-07-03 16:39
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 12楼 你们都要疼我哦
我知道楼主问的是什么问题, 我明确表示了我不懂楼主的问题。2楼只是在说说我的随感。
我确实是一个底层盲, 如果我的偶像的话都不可信的话,我又该迷茫了,我该何去何从?


好吧, 麻烦你有时间看下 下面的截图,


[ 本帖最后由 BlueGuy 于 2010-7-3 19:48 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-07-03 19:26
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

我就是真命天子,顺我者生,逆我者死!
2010-07-03 19:29
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

我就是真命天子,顺我者生,逆我者死!
2010-07-03 19:32
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

我就是真命天子,顺我者生,逆我者死!
2010-07-03 20:05
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
我们不能保证写代码的时候用的都是库函数吧? 也不能保证 自定义的函数只有一行代码吧?
OD 原来是反汇编的意思啊, 我前面的帖子已经说了, 反汇编出来的结果不具有 普遍适用性,是一种本未倒置的理解c 语言的方式。您是在哪个操作系统上用的什么编译器反汇编的? 您可以保证在您的系统上是这个结果,您能保证在别的系统上别的编译器也是这个结果?


[ 本帖最后由 BlueGuy 于 2010-7-3 20:26 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-07-03 20:12
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用你们都要疼我哦在2010-7-3 14:10:06的发言:

哎 效率不是靠想象的,你认为每循环一次,就都要去计算strlen(),这只是你的想当然。

实际上仅在进入时计算一次,然后strlen(source)-strlen(substr1)+1就以固定值出现了。
无端又引入srcLen subLen 这两个局部变量。。。其实其值相对来讲是常量,运行时还要分配栈空间,效率反而低。
也许你想的多一些,认为循环条件并非常量,认为他们是作为参数传入,在编译阶段无法确定,值并不固定,所以每次都要计算。 但实际进到函数内部 对于FOR来说,仅需计算一次,就是固定值。再长,也不会进行第2次计算。
可能比较不容易理解, 慢慢学多了就好了。
这个是看编译器的优化情况了吧?不同的编译器对此处理方法应该不一样吧

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-03 22:55
快速回复:字符串替换函数定义方式比较
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016110 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved