有争议的代码风格

47 views
Skip to first unread message

Eric.Wang

unread,
May 3, 2009, 11:05:15 AM5/3/09
to TopLanguage
1,"++i"和"i++",何者是更好的代码风格?
2,"NULL =="和"== NULL",何者是更好的代码风格?

我提出这两个问题,是源于理论和实践的脱节。

++i在很多情况下可以有更好的性能。"NULL =="可以避免“==”被误写为“=”。
从理论上来看,这似乎应该是更好的代码。反对的理由不太站得住脚:习惯、顺眼。

但是我看了一些优秀的开源项目代码,发现大多数都是写成“i++”和"== NULL"的。

当理论和实践出现脱节的时候,你们会选择相信理论,还是跟从实践?

Eric.Wang

unread,
May 3, 2009, 11:10:32 AM5/3/09
to TopLanguage
以lighttpd的代码为例子

http://www.lighttpd.net/download/lighttpd-1.4.22.tar.gz

里面的代码我摘录几段:

array.c:
for (j = a->used; j < a->size; j++) a->data[j] = NULL;

mod_scgi.c:
for (i = 0; i < f->used; i++) {

server.c:
for (i = 0; i < FILE_CACHE_MAX; i++) {

request.c
for (; *c && *c != ']'; c++) {

Daniel Lv

unread,
May 3, 2009, 11:11:38 AM5/3/09
to pon...@googlegroups.com
代码首先是写给人看的,其次才是机器...
《代码大全》第七部分整个篇幅都是在说明这么简单的一个道理,力顶一切为了人能方便阅读的代码!

2009/5/3 Eric.Wang <wangsh...@gmail.com>

SevenCat

unread,
May 3, 2009, 12:39:06 PM5/3/09
to TopLanguage
好像很久以前==NULL,NULL==就有人说过了,前者更符合逻辑习惯,我也认为i++更符合逻辑习惯。其实我有时候觉得i+1比1+i有时候也更
符合逻辑习惯。
变量和常量的运算中,一般可能是变量在前面。如果是乘的话2*a和a*2可能差不多符合逻辑习惯。

这个比较有意思,我翻了C#:
msdn中C#的例子:
// statements_for.cs
// for loop
using System;
public class ForLoopTest
{
public static void Main()
{
for (int i = 1; i <= 5; i++)
Console.WriteLine(i);
}
}

SevenCat

unread,
May 3, 2009, 12:43:05 PM5/3/09
to TopLanguage
到于++i,i++的效率,我曾经用stlport里面的iterator做测试,好像是一个map<int,>还是什么的iterator ,发现
iterator++和++iterator在for里面的汇编代码是完全一样的。

On 5月3日, 下午11时05分, "Eric.Wang" <wangshaoq...@gmail.com> wrote:

Jay True

unread,
May 3, 2009, 8:28:46 PM5/3/09
to pon...@googlegroups.com
好的品味难道非得从这种地方才能看出来的么?

我不是说从这种地方看不出来,不过我觉得设计才更能体现吧?

以上。

--
歌词唱清楚,不是周杰伦
Home Page: http://glacjay.is-a-geek.org/blog/

Eric.Wang

unread,
May 3, 2009, 9:27:49 PM5/3/09
to TopLanguage

设计确实更能体现好的品味,清爽的设计和纠结的设计更能体现程序员的品味。不过设计的好坏更难评估,好的设计通常也是平平无奇的,你通常只能从结果来判
断,这个设计是好的。当你看到一个平平无奇的设计的时候,你很难凭空判断这个设计是好的还是坏的,一个设计的好坏,通常是和具体应用环境相关的。在这里
是个好设计,在那里可能就是个坏设计。

从代码的细处,也是能看出程序员的价值取向和品味的。能否把代码写得清晰简洁美观,除了基本功,还需要程序员的品味。比如,喜欢写“++i”或
者“NULL ==”的家伙,品味相对来说可能就差了点,因为他们仅仅根据不可靠的网上文章(比如林锐那篇编程指南)或者不完整的理论,就写出了让自己
也让别人别扭的代码。

设计确实更能体现程序员的品味,但是编码更直观更更容易检验。

wing

unread,
May 3, 2009, 9:35:44 PM5/3/09
to pon...@googlegroups.com
也不完全是这样的,比如说null
==,虽然看比起来别扭,但是除非做了更好的替代,比如用工具检查,否则==写成=,并不是一件好玩的事情,特别在比较大的项目中,程序员水平又参差不齐时。

某设备大厂商,一个生产系统当了数小时,找了很久才找出的原因,居然就是一个判断中==写成了=,这种事并不是什么天荒夜谈,在没有更好的方式前,null
== 还是有意义的,除非你用更好的方式代替它,例如编译器的设置,或者工具检查,否则这点代价还是要付出的。

2009/5/4 Eric.Wang <wangsh...@gmail.com>:

--
wing
wing9...@gmail.com
Hope is a good thing, maybe the best of things.

Eric.Wang

unread,
May 3, 2009, 9:53:36 PM5/3/09
to TopLanguage
对于VC有:error C4706: assignment within conditional expression
g++比较差一些,不能提供这个提示。于是我们用C#写了一个小工具,专门检查if ()括号里面有没有赋值操作。我们公司的策略是if ()里面尽量
不要做赋值操作(有些旧的代码在if里面赋值了,我们的工具可以标记这些代码,并略过检查)。

把==写成=,其实是逻辑错误。程序的逻辑错误有很多,这主要是需要通过测试来保证正确。测试做得不完整,怎么写代码都是没用的。


On 5月4日, 上午9时35分, wing <wing922w...@gmail.com> wrote:
> 也不完全是这样的,比如说null
> ==,虽然看比起来别扭,但是除非做了更好的替代,比如用工具检查,否则==写成=,并不是一件好玩的事情,特别在比较大的项目中,程序员水平又参差不齐时。
>
> 某设备大厂商,一个生产系统当了数小时,找了很久才找出的原因,居然就是一个判断中==写成了=,这种事并不是什么天荒夜谈,在没有更好的方式前,null
> == 还是有意义的,除非你用更好的方式代替它,例如编译器的设置,或者工具检查,否则这点代价还是要付出的。
>

> 2009/5/4 Eric.Wang <wangshaoq...@gmail.com>:


>
>
>
>
>
> > 设计确实更能体现好的品味,清爽的设计和纠结的设计更能体现程序员的品味。不过设计的好坏更难评估,好的设计通常也是平平无奇的,你通常只能从结果来判
> > 断,这个设计是好的。当你看到一个平平无奇的设计的时候,你很难凭空判断这个设计是好的还是坏的,一个设计的好坏,通常是和具体应用环境相关的。在这里
> > 是个好设计,在那里可能就是个坏设计。
>
> > 从代码的细处,也是能看出程序员的价值取向和品味的。能否把代码写得清晰简洁美观,除了基本功,还需要程序员的品味。比如,喜欢写"++i"或
> > 者"NULL =="的家伙,品味相对来说可能就差了点,因为他们仅仅根据不可靠的网上文章(比如林锐那篇编程指南)或者不完整的理论,就写出了让自己
> > 也让别人别扭的代码。
>
> > 设计确实更能体现程序员的品味,但是编码更直观更更容易检验。
>
> > On 5月4日, 上午8时28分, Jay True <glac...@gmail.com> wrote:
> >> 好的品味难道非得从这种地方才能看出来的么?
>
> >> 我不是说从这种地方看不出来,不过我觉得设计才更能体现吧?
>
> >> 以上。
>
> >> --
> >> 歌词唱清楚,不是周杰伦
> >> Home Page:http://glacjay.is-a-geek.org/blog/
>
> --
> wing

> wing922w...@gmail.com

wang feng

unread,
May 3, 2009, 9:58:43 PM5/3/09
to pon...@googlegroups.com
Eric.Wang wrote:
> 1,"++i"和"i++",何者是更好的代码风格?
> 2,"NULL =="和"== NULL",何者是更好的代码风格?
>
> 我提出这两个问题,是源于理论和实践的脱节。
>
> ++i在很多情况下可以有更好的性能。"NULL =="可以避免“==”被误写为“=”。
> 从理论上来看,这似乎应该是更好的代码。反对的理由不太站得住脚:习惯、顺眼。
>
> 但是我看了一些优秀的开源项目代码,发现大多数都是写成“i++”和"== NULL"的。
>
++i多于i++的

pwd && cat *.c |grep 'for ('
/home/feng/src/glibc-2.9-20090427/rt
for (cnt = 0; cnt < nent; ++cnt)
for (cnt = 0; cnt < 10; ++cnt)
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (cnt = 0; cnt < 1000; ++cnt)
for (cnt = 0; cnt < 10; ++cnt)
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (i = 0; i < BYTES; i++)
for (cnt = 0; cnt < nent; ++cnt)
for (cnt = 0; cnt < 10; ++cnt)
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (cnt = 0; cnt < 1000; ++cnt)
for (cnt = 0; cnt < 10; ++cnt)
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (cnt = 10; cnt > 0; )
for (i = 0; i < 10; ++i)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 100; ++i)
for (size_t j = 0; j < sizeof buf; ++j)
for (int i = 0; i < 10; ++i)
for (int i = 0; i < 10; ++i)
for (int i = 1; i < argc; ++i)
for (long l = TF_MQ_RECEIVE; l <= TF_MQ_TIMEDSEND; ++l)
for (i = 0; i <= 4; ++i)
for (i = 0; i <= 4; ++i)
for (i = 0; i <= 4; ++i)
for (i = 0; i <= 4; ++i)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
> 当理论和实践出现脱节的时候,你们会选择相信理论,还是跟从实践?
>

wang feng

unread,
May 3, 2009, 10:04:23 PM5/3/09
to pon...@googlegroups.com
Eric.Wang wrote:
> 1,"++i"和"i++",何者是更好的代码风格?
> 2,"NULL =="和"== NULL",何者是更好的代码风格?
>
> 我提出这两个问题,是源于理论和实践的脱节。
>
> ++i在很多情况下可以有更好的性能。"NULL =="可以避免“==”被误写为“=”。
> 从理论上来看,这似乎应该是更好的代码。反对的理由不太站得住脚:习惯、顺眼。
>
> 但是我看了一些优秀的开源项目代码,发现大多数都是写成“i++”和"== NULL"的。
>
>
string文件夹下也是++i 多于i++的,如附件


> 当理论和实践出现脱节的时候,你们会选择相信理论,还是跟从实践?
>

string.list.tar.bz2

Jockey S. Kyd

unread,
May 3, 2009, 10:03:39 PM5/3/09
to pon...@googlegroups.com
我认为,实际上这并不是一个好习惯,因为它不是普适的经验,譬如当运算符两端的对象都能作为左值时。
所以最好还是养成条件反射,外加lint辅助。

2009/5/4 wing <wing9...@gmail.com>:

Tiny fool

unread,
May 3, 2009, 10:14:32 PM5/3/09
to pon...@googlegroups.com
你们两位基本上已经在持有同样的观点了。

就是NULL==,如果没有警告,或者工具检查的话,还是有一些必要的,当然最好是,工具或者编译器能够识别assignment within conditional expression。

2009/5/4 Eric.Wang <wangsh...@gmail.com>



--
--------------
Gmail: tiny...@gmail.com
Gtalk:   tiny...@gmail.com
Phone: 13520711089
Twitter:http://twitter.com/tinyfool

银杏泰克科技有限公司-专业的站内搜索引擎提供商
http://www.ginkgotek.com/

Tinyfool的开发日记
http://www.tinydust.net/prog/diary/diary.htm

TV的Google观察
http://www.tinydust.net/tinygoogle/

Eric.Wang

unread,
May 3, 2009, 10:22:10 PM5/3/09
to TopLanguage
名称 == NULL NULL ==
MFC 1789 12
Libxml2 47 4
Lighttpd 213 129
Apache 1070 5
Coreutils 420 0
Gaim 1044 0
Firefox 7781 2166
Open Office 2583 398
Emule 550 47
Linux kernel 12436 318
glibc 3715 0


On 5月4日, 上午9时35分, wing <wing922w...@gmail.com> wrote:

> 也不完全是这样的,比如说null
> ==,虽然看比起来别扭,但是除非做了更好的替代,比如用工具检查,否则==写成=,并不是一件好玩的事情,特别在比较大的项目中,程序员水平又参差不齐时。
>
> 某设备大厂商,一个生产系统当了数小时,找了很久才找出的原因,居然就是一个判断中==写成了=,这种事并不是什么天荒夜谈,在没有更好的方式前,null
> == 还是有意义的,除非你用更好的方式代替它,例如编译器的设置,或者工具检查,否则这点代价还是要付出的。
>

> 2009/5/4 Eric.Wang <wangshaoq...@gmail.com>:


>
>
>
>
>
> > 设计确实更能体现好的品味,清爽的设计和纠结的设计更能体现程序员的品味。不过设计的好坏更难评估,好的设计通常也是平平无奇的,你通常只能从结果来判
> > 断,这个设计是好的。当你看到一个平平无奇的设计的时候,你很难凭空判断这个设计是好的还是坏的,一个设计的好坏,通常是和具体应用环境相关的。在这里
> > 是个好设计,在那里可能就是个坏设计。
>
> > 从代码的细处,也是能看出程序员的价值取向和品味的。能否把代码写得清晰简洁美观,除了基本功,还需要程序员的品味。比如,喜欢写"++i"或
> > 者"NULL =="的家伙,品味相对来说可能就差了点,因为他们仅仅根据不可靠的网上文章(比如林锐那篇编程指南)或者不完整的理论,就写出了让自己
> > 也让别人别扭的代码。
>
> > 设计确实更能体现程序员的品味,但是编码更直观更更容易检验。
>
> > On 5月4日, 上午8时28分, Jay True <glac...@gmail.com> wrote:
> >> 好的品味难道非得从这种地方才能看出来的么?
>
> >> 我不是说从这种地方看不出来,不过我觉得设计才更能体现吧?
>
> >> 以上。
>
> >> --
> >> 歌词唱清楚,不是周杰伦
> >> Home Page:http://glacjay.is-a-geek.org/blog/
>
> --
> wing

> wing922w...@gmail.com

Li Feng

unread,
May 3, 2009, 10:41:03 PM5/3/09
to pon...@googlegroups.com
随项目,即一个共同的编码规范。其实这些都没必要去抠的这么细。
至于性能,嗯,i++和++i我感觉都是可以忽略的东西。

一般你参加到一个项目中去,更不必要去考虑这些东西了,有代码
都写好了,照着写就是了。

Li Feng

2009/5/3 Eric.Wang <wangsh...@gmail.com>:

Eric.Wang

unread,
May 3, 2009, 10:47:06 PM5/3/09
to TopLanguage

恩,我统计了glibc里面,i++有484次,++i有1057次。我看了一下使用的场合,发现里面i++大多是用在crypt、strcpy、
memcpy这样极端需要性能的地方。在极端需要性能的时候,品味是要让位于需求的。
即使是在glibc这样极端考虑移植和优化的地方,i++仍然出现了484次,我认为这仍然说明i++是更好的品味。甚至可以说,写代码的人是尽量在使
用i++的,只是出于性能考虑,不得不使用++i。

我回头查一下我前面的赌注,看我算不算输。。。。输了的话我就单独发帖说明我输了。。。。只要group里面的人不觉得我发新topic是骚
扰。。。。

补充说明一下:
在firefox里面是6623次和2195次。
在linux kernel里面是20894次和2098次。
在MFC里面是448次和36次。
都是i++远远多于++i。

> string.list.tar.bz2
> 2K查看下载

Jeffrey Zhao

unread,
May 3, 2009, 10:51:14 PM5/3/09
to pon...@googlegroups.com
我有点没看懂:

1、“极端需要性能”的地方大都使用“i++”
2、“i++”品位高,性能差(相对)

为什么得出“在极端需要性能的时候,品味是要让位于需求的”?


Jeffrey Zhao
Blog: http://jeffreyzhao.cnblogs.com
Twitter: http://twitter.com/jeffz_cn

--------------------------------------------------
From: "Eric.Wang" <wangsh...@gmail.com>
Sent: Monday, May 04, 2009 10:47 AM
To: "TopLanguage" <pon...@googlegroups.com>
Subject: [TL] Re: 有争议的代码风格

Eric.Wang

unread,
May 3, 2009, 10:59:16 PM5/3/09
to TopLanguage

1、对不起,这个地方是我写错了,笔误,应该是"极端需要性能"的地方大都使用"++i" 。
2、i++ 和++i能否在优化之后得到同样的性能,可能会取决于软硬件平台(包括编译器)。glibc需要在尽可能多的平台上获得尽可能好的性能,因
此他们写代码的时候写++i是可以理解的。而且glic的历史非常悠久(以IT行业来说),当时的一些写法可能有当时的一些考虑。

品味实际上任何时候都是要让位于需求的。当需求是性能的时候,品味就要让位于性能。


On 5月4日, 上午10时51分, "Jeffrey Zhao" <je...@live.com> wrote:
> 我有点没看懂:
>
> 1、"极端需要性能"的地方大都使用"i++"
> 2、"i++"品位高,性能差(相对)
>
> 为什么得出"在极端需要性能的时候,品味是要让位于需求的"?
>
> Jeffrey Zhao
> Blog:http://jeffreyzhao.cnblogs.com
> Twitter:http://twitter.com/jeffz_cn
>
> --------------------------------------------------

> From: "Eric.Wang" <wangshaoq...@gmail.com>

Mea Culpa

unread,
May 3, 2009, 11:05:37 PM5/3/09
to pon...@googlegroups.com

个人希望我国软件行业有一个大量规范化的
代码编写群体早就的强健的产业基础,

而不是只有讲究品位的艺术家创造的空中花园

我们不是北欧

--
=================
Holier Than Thou!
=================

Eric.Wang

unread,
May 3, 2009, 11:37:06 PM5/3/09
to TopLanguage
品味是很实用的,规范化其实和品味是分不开的。至少公司的技术负责人要有好的品味,才能制定出好的规范。
对于代码工人,确实只要遵循规范就可以了。更高的要求是,不止要有规范,而且还要有好的规范。好的规范才容易被认可,容易被执行。

殷远超

unread,
May 4, 2009, 2:07:13 AM5/4/09
to pon...@googlegroups.com
很多时候,大家都找一个故事来证明某件事情必须怎么样,而不去理会该故事发生的环境。
在现代,把编译器警告选项打到一个较高级别,==和=错误是会给警告的。

至于i++和++i,现代编译器也都是可以优化的。一代人有一代人的江湖,上一代人这么做,我支持,但是现在这代人如果非要把这些好的习惯都继承下来,那过几十年,程序员要固守的对代码没有影响的条条框框就可以让人用一辈子去学习了。

2009/5/4 wing <wing9...@gmail.com>



--
殷远超 http://www.yinux.com

殷远超

unread,
May 4, 2009, 2:10:40 AM5/4/09
to pon...@googlegroups.com
这个理论上只需要编译器处理就够了,在这个命题上,必然是相信该平台能支持i++和++i的,那么什么时候用++i替代i++,是需要编译器来判断的。

2009/5/4 Eric.Wang <wangsh...@gmail.com>
2、i++ 和++i能否在优化之后得到同样的性能,可能会取决于软硬件平台(包括编译器



--
殷远超 http://www.yinux.com

halida

unread,
May 4, 2009, 5:58:58 AM5/4/09
to TopLanguage
在我看來,有爭議的格式應該在編譯器層次,甚至在語言層次就要被統一成一種。
程序員應該關注在設計上面,而不是考慮語法和結構。
C太自由了(或者說那個時候設計語言時沒有考慮到這樣的問題?)

William Xu

unread,
May 3, 2009, 11:37:25 PM5/3/09
to pon...@googlegroups.com
C 里面 ++i, i++ 没什么差别啊。

C++ 里面 i 如果是对象,比如 stl iterator, 那开销还是不小的。

反正 ++i, i++ 从视觉效果来看,并没有太大的差别。++i 既然有时效率更好,那
我觉得养成 ++i 的习惯挺好的(尤其在循环体内)…

--
William

DarkRaven

unread,
May 4, 2009, 12:26:06 AM5/4/09
to TopLanguage
似乎++i和i++只有在C++才存在区别,C中这两者性能该是一样的

孙辉

unread,
May 4, 2009, 1:50:50 AM5/4/09
to pon...@googlegroups.com
我觉得i++和++i不仅仅是风格的问题吧?除非像for循环里面,可以讨论是用i++或者++i之类的,不过我觉得这些有区别吗?难道因为用了i++或者++i性能就不一样了?一般情况下不都是看实际情况来决定是用i++或者++i吗?

孙辉

unread,
May 4, 2009, 1:57:31 AM5/4/09
to pon...@googlegroups.com
我看到有关于i=i+1, i+=1, i++之类的效率讨论,他们的效率肯定是不一样的,不过倒是很少见到说i++和++i之类的还有这样的效率问题,他们的效率难道真的不一样?

Aw Guo

unread,
May 4, 2009, 11:26:37 AM5/4/09
to pon...@googlegroups.com
我是一个ActionScript程序员,没有C++和Java那么严谨的规范。但我认同后面回复中所说的“一切为了人能方便阅读的代码

NULL == someVar

阅读起来的确不如

someVar == NULL

顺畅,但如果是这样的情况:

if (NULL == someVar) {

}
if (NULL == someTestObject) {

}
if (NULL == someDisplayObject.getAttribute("somePropertyName")) {

}

对齐之后就看起来更明显了。看看不对其的版本:

if (someVar == NULL) {

}
if (someTestObject == NULL) {

}
if (someDisplayObject.getAttribute("somePropertyName") == NULL ) {

}

2009/5/3 Eric.Wang <wangsh...@gmail.com>
1,"++i"和"i++",何者是更好的代码风格?
2,"NULL =="和"== NULL",何者是更好的代码风格?

我提出这两个问题,是源于理论和实践的脱节。

++i在很多情况下可以有更好的性能。"NULL =="可以避免“==”被误写为“=”。
从理论上来看,这似乎应该是更好的代码。反对的理由不太站得住脚:习惯、顺眼。

但是我看了一些优秀的开源项目代码,发现大多数都是写成“i++”和"== NULL"的。

当理论和实践出现脱节的时候,你们会选择相信理论,还是跟从实践?

Daniel Lv

unread,
May 4, 2009, 12:04:09 PM5/4/09
to pon...@googlegroups.com
大家仍然关系到底在编译器以及语言特性上,++i和i++有什么不同阿....唉~~
如果测试用例都通过了,运行结果也没有问题,那么就团队举手表决吧,如果大家都习惯其中一种写法,就用那种,反之亦然,最重要的是++i或i++都是写给人看的。

2009/5/4 Aw Guo <awfl...@gmail.com>

chaoyan ma

unread,
May 4, 2009, 9:58:30 PM5/4/09
to pon...@googlegroups.com
这个就不太同意了 ++i 和i++ 在人看来没什么太大区别(不会带来理解上的困难和强烈的不适应)
但是对编译器来说 ++i比 i++效率更高 做的工作更少 那么为什么不用++i 呢~

2009/5/5 Daniel Lv <lgn...@gmail.com>

大家仍然关系到底在编译器以及语言特性上,++i和i++有什么不同阿....唉~~
如果测试用例都通过了,运行结果也没有问题,那么就团队举手表决吧,如果大家都习惯其中一种写法,就用那种,反之亦然,最重要的是++i或i++都是写给人看的。



--
最初的梦想

Eric.Wang

unread,
May 4, 2009, 10:35:53 PM5/4/09
to TopLanguage
这就是我帖子的关注点所在。

我承认你说的有一定道理,++i和i++仅仅是阅读上顺畅与否的问题,不会带来理解上的困难,也不会带来强烈的不适应。但是为什么实践上大多数成功的开
源项目都是写成i++而不写++i呢?微软的MFC也大多写i++。

在firefox里面是6623次和2195次。
在linux kernel里面是20894次和2098次。(差不多是最著名最成功的开源项目了吧,里面i++的数量差不多是++i的数量的十倍)
在MFC里面是448次和36次。(这是最成功的软件公司提供的的最重要的基础开发架构)
都是i++远远多于++i。

目前仅有的一个反例glibc也仅仅是484次和1057次,仍然有484次i++。

为什么不用i++,我的观点就是代码阅读起来越顺畅约好。即使“不会带来理解上的困难和强烈的不适应”,只要有阅读一些不顺畅,写代码就要尽量写成阅读
顺畅的方式。这在理论上缺乏说服力,但是实践说明这是一种好的方式。我们应该跟随理论,还是实践呢?


On 5月5日, 上午9时58分, chaoyan ma <chaoyan...@gmail.com> wrote:
> 这个就不太同意了 ++i 和i++ 在人看来没什么太大区别(不会带来理解上的困难和强烈的不适应)
> 但是对编译器来说 ++i比 i++效率更高 做的工作更少 那么为什么不用++i 呢~
>

> 2009/5/5 Daniel Lv <lgn2...@gmail.com>

chaoyan ma

unread,
May 4, 2009, 10:45:29 PM5/4/09
to pon...@googlegroups.com
……
统计……  对已知确定事物 统计不能作为证据
就比如 ++i 已知效率比i++高  就请不要用统计这个表面上的数据来作为论据
就比如我吧,在此之前可能关注过++i 比i++ 效率高 但是写代码的时候也习惯性用i++
但是 现在意识到这是一个不好的习惯 然后 开始注意纠正 那不是很好吗?
 
“优秀只是一种习惯” 不知道哪里的名言了
2009/5/5 Eric.Wang <wangsh...@gmail.com>



--
最初的梦想

Eric.Wang

unread,
May 4, 2009, 10:48:52 PM5/4/09
to TopLanguage

修订一下:为什么不用++i,我的观点就是代码阅读起来越顺畅越好。即使“不会带来理解上的困难和强烈的不适应”,只要阅读有一些不顺畅,写代码就要尽

量写成阅读
顺畅的方式。这在理论上缺乏说服力,但是实践说明这是一种好的方式。我们应该跟随理论,还是实践呢?


另外再说一下"== NULL"还是"NULL =="的问题:


Linux kernel 12436 318
glibc 3715 0

在linux kernel里面,"NULL =="只出现了318次,而glibc里面“NULL ==”根本就一次都没有。
这也是理论和实践出现了冲突。

我的观点是:理论上说得再好听也没用。实践是检验真理的唯一标准。代码的可读性是非常重要的,没有十分必要的理由,代码就应该写得符合常人的逻辑和阅读
习惯。

chaoyan ma

unread,
May 4, 2009, 10:58:28 PM5/4/09
to pon...@googlegroups.com
代码习惯不是一种理论的东西
首先 理论上的话 ==NULL 和NULL==  效果一样
但是 NULL== 这样的写法能避免出现更多的bug(防止少写一个=)

另外 人家优秀也不是因为把 NULL== 写成==NULL   但是 我们写==NULL 也不一定优秀 反而可能耗费更多时间 写NULL==也不阻挡你优秀
最后 请问 ==NULL 和NULL==阻碍了您的可读性吗?
 
 
2009/5/5 Eric.Wang <wangsh...@gmail.com>



--
最初的梦想

Eric.Wang

unread,
May 4, 2009, 11:02:43 PM5/4/09
to TopLanguage
"习惯"这就是关键所在。为什么会习惯呢?因为那样比较自然比较顺畅。自然和顺畅,本身就是非常重要的要求。凌驾于"++i可能会更快"之上,也凌驾
于"避免==写成="之上。

如果"对已知确定事物 统计不能作为证据",那什么叫做"归纳法"?

把优秀项目里面共同的特质提取出来,为什么就不能成为好的经验呢?仅仅因为一些不充分的理论吗?


On 5月5日, 上午10时45分, chaoyan ma <chaoyan...@gmail.com> wrote:
> ......
> 统计...... 对已知确定事物 统计不能作为证据


> 就比如 ++i 已知效率比i++高 就请不要用统计这个表面上的数据来作为论据
> 就比如我吧,在此之前可能关注过++i 比i++ 效率高 但是写代码的时候也习惯性用i++
> 但是 现在意识到这是一个不好的习惯 然后 开始注意纠正 那不是很好吗?
>
> "优秀只是一种习惯" 不知道哪里的名言了

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

Eric.Wang

unread,
May 4, 2009, 11:05:33 PM5/4/09
to TopLanguage
"可读性"没有量化的指标,但是确实是存在的。

Linux kernel 12436 318
glibc 3715 0
在linux kernel里面,"NULL =="只出现了318次,而glibc里面"NULL =="根本就一次都没有。

我知道"NULL =="的写法可以避免一部分==写成=的错误,但是和"可读性"比起来,不值得。

如果不是"可读性"的原因,我不知道如何解释"在linux kernel里面,"NULL =="只出现了318次,而glibc里面"NULL
=="根本就一次都没有"。


On 5月5日, 上午10时58分, chaoyan ma <chaoyan...@gmail.com> wrote:
> 代码习惯不是一种理论的东西
> 首先 理论上的话 ==NULL 和NULL== 效果一样
> 但是 NULL== 这样的写法能避免出现更多的bug(防止少写一个=)
>
> 另外 人家优秀也不是因为把 NULL== 写成==NULL 但是 我们写==NULL 也不一定优秀 反而可能耗费更多时间
> 写NULL==也不阻挡你优秀
> 最后 请问 ==NULL 和NULL==阻碍了您的可读性吗?
>

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

居振梁

unread,
May 4, 2009, 11:07:14 PM5/4/09
to pon...@googlegroups.com
这个问题真没必要争了,这跟“为什么IT行业内部的人里还是用windows多”是一个道理


--
自学走了不少弯路,更浪费了太多的时间,寻找良师益友。
追求黑客精神和清心寡欲的心态。
http://wargrey.yo2.cn
http://wargrey.blogspot.com
主要兴趣:Unix/GNU Linux、人工智能、移动计算、虚拟化
其他兴趣:心理学、自然科学、数学、武术、自然语言

qiaojie

unread,
May 4, 2009, 11:09:23 PM5/4/09
to pon...@googlegroups.com
习惯跟自然顺畅关系不大的,完全是先入为主的。比方说,中国古代的书写顺序是从上往下从右往左,跟洋人的完全相反,你能说是哪个更自然顺畅吗?还有QWERT键盘,这种排列方式是因为某个商人故意搞出来噱头,其实没什么科学根据的,但是就成了大家的习惯,以致按字母排列的键盘反而没人能用的惯了。你能说QWERT排列比ABCDE排列更自然顺畅吗?



2009/5/5 Eric.Wang <wangsh...@gmail.com>

wangmao

unread,
May 4, 2009, 11:09:30 PM5/4/09
to pon...@googlegroups.com
对,每个存在都有它存在的道理,争这些没前途…再长的时间都争不出个结果。
2009/5/5 居振梁 <juzhe...@gmail.com>

Eric.Wang

unread,
May 4, 2009, 11:10:48 PM5/4/09
to TopLanguage

你的意思是所有这些优秀的项目,都不约而同的使用了“不好的代码风格”,而且还都恰好成为了优秀的项目,是吗?

我认为这不是偶然。这是优秀项目共有的特质:注重可读性甚于理论。


On 5月5日, 上午11时07分, 居振梁 <juzhenli...@gmail.com> wrote:
> 这个问题真没必要争了,这跟“为什么IT行业内部的人里还是用windows多”是一个道理
>
> --
> 自学走了不少弯路,更浪费了太多的时间,寻找良师益友。

> 追求黑客精神和清心寡欲的心态。http://wargrey.yo2.cnhttp://wargrey.blogspot.com

Jeffrey Zhao

unread,
May 4, 2009, 11:11:19 PM5/4/09
to pon...@googlegroups.com
键盘布局据说是为了故意降低输入速度,避免打字机卡壳,呵呵。

From: qiaojie
Sent: Tuesday, May 05, 2009 11:09 AM
Subject: [TL] Re: 有争议的代码风格

wangmao

unread,
May 4, 2009, 11:14:24 PM5/4/09
to pon...@googlegroups.com
如果人并非只有黄种人一样,好的代码风格也并非只有一种。你心目中的好风格,并不妨碍别人心目中的好风格,把自己的喜好强加在别人身上这不是什么好习惯。然后,我宣布不再对此话题进行发言,没意义。
2009/5/5 Eric.Wang <wangsh...@gmail.com>

Eric.Wang

unread,
May 4, 2009, 11:17:29 PM5/4/09
to TopLanguage
你说的对,这很大程度上是个习惯问题。就像我们常常习惯"主谓宾"的语言结构,其实"宾谓主"的语言结构在逻辑上也是等价的。比如"我吃饭"和"饭吃
我",在逻辑上都是完整的,只要大家习惯宾语和主语的位置。

那么,你会因为"QWERT"不如"ABCDE"的排列整齐,就要求全公司都改习惯,让他们用"ABCDE"的键盘吗?

"++i"和"NULL =="涉及的就是脑子里面的思维的习惯,思维的习惯是几十年和人谈话交流形成的。要改可以,但不是无代价的。值得吗?


On 5月5日, 上午11时09分, qiaojie <qiao...@gmail.com> wrote:
> 习惯跟自然顺畅关系不大的,完全是先入为主的。比方说,中国古代的书写顺序是从上往下从右往左,跟洋人的完全相反,你能说是哪个更自然顺畅吗?还有QWERT键盘,这种排列方式是因为某个商人故意搞出来噱头,其实没什么科学根据的,但是就成了大家的习惯,以致按字母排列的键盘反而没人能用的惯了。你能说QWERT排列比ABCDE排列更自然顺畅吗?
>

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

qiaojie

unread,
May 4, 2009, 11:19:26 PM5/4/09
to pon...@googlegroups.com
我觉得这位老兄大可不必一定要找出这些习惯背后的内在逻辑,很多习惯其实是没有什么道理可言的。
把== null改成null == 确实能带来一定好处,但是编程大师们可能认为这些好处不足以成为改变自己习惯
的理由,因为他们是大师,不可能犯这种低级的错误。如果你一定要什么都跟大师学,反而可能会犯郑
人学步、东施效颦的错误,所以大可不必在这个上面如此执着。



2009/5/5 Eric.Wang <wangsh...@gmail.com>

Eric.Wang

unread,
May 4, 2009, 11:19:50 PM5/4/09
to TopLanguage

何谓意义?

对程序员来说,代码风格就是标准。制定标准怎么能说是无意义的呢?很多公司都规定使用”NULL ==“,我认为这是谬种流传,伤害了中国的程序员。

On 5月5日, 上午11时14分, wangmao <lwm3...@gmail.com> wrote:
> 如果人并非只有黄种人一样,好的代码风格也并非只有一种。你心目中的好风格,并不妨碍别人心目中的好风格,把自己的喜好强加在别人身上这不是什么好习惯。然后,我宣布不再对此话题进行发言,没意义。

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

qiaojie

unread,
May 4, 2009, 11:26:16 PM5/4/09
to pon...@googlegroups.com
我的意思是说,不要在彼此不同的习惯上争高下,这样没什么意义。如果你加入一个团队,这个团队习惯了用null ==,那你就应该尊重这种习惯,入乡随俗嘛,而不是把大师们的代码搬出来维护自己的习惯,让自己显得格格不入,这样没什么好处。反之,那些宣扬++i,null== 是好习惯的言论其实也是没有多大意义的。




2009/5/5 Eric.Wang <wangsh...@gmail.com>

Eric.Wang

unread,
May 4, 2009, 11:28:03 PM5/4/09
to TopLanguage
你的态度很友好,但是我不接受你的观点。

"如果你一定要什么都跟大师学,反而可能会犯郑人学步、东施效颦的错误",这是meaningless的说辞,可以放在任何地方,因为借鉴任何东西
都”可能会犯郑人学步、东施效颦的错误“。

”把== null改成null == 确实能带来一定好处“,这是对的,但是并不是免费的。因此是一个需要取舍的问题,而不是非此不可的问题。很多人
只看到了这样做的好处,没有看到在可读性上付出的代价,因为”可读性“是难以量化的。

这些优秀的项目都做了取舍,而且不约而同的选择了可读性。我认为这些优秀项目中共同的部分,是值得借鉴的。


On 5月5日, 上午11时19分, qiaojie <qiao...@gmail.com> wrote:
> 我觉得这位老兄大可不必一定要找出这些习惯背后的内在逻辑,很多习惯其实是没有什么道理可言的。
> 把== null改成null == 确实能带来一定好处,但是编程大师们可能认为这些好处不足以成为改变自己习惯
> 的理由,因为他们是大师,不可能犯这种低级的错误。如果你一定要什么都跟大师学,反而可能会犯郑
> 人学步、东施效颦的错误,所以大可不必在这个上面如此执着。
>

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

chaoyan ma

unread,
May 4, 2009, 11:28:52 PM5/4/09
to pon...@googlegroups.com
我觉得 作为性能相关的习惯 值得去改;
可读可维护相关的习惯,如 NULL== 和==NULL 如果你确定自己不会写成NULL= 那么 萝卜青菜

--
最初的梦想

chaoyan ma

unread,
May 4, 2009, 11:35:36 PM5/4/09
to pon...@googlegroups.com
呵呵 不好意思 打错了是 X=NULL
--
最初的梦想

qiaojie

unread,
May 4, 2009, 11:41:43 PM5/4/09
to pon...@googlegroups.com
呵呵,你可以保留你的意见。我只是觉得你在这种习惯问题上如此执着,可能会在团队合作上出现一些障碍,个体去改变群体的习惯是非常困难的,在这种习惯问题上争论不休只会造成团队无谓的内耗。只是善意的提醒,如有冒犯请海涵。



2009/5/5 Eric.Wang <wangsh...@gmail.com>

Ian Young, Yingcai

unread,
May 4, 2009, 11:46:27 PM5/4/09
to pon...@googlegroups.com
项目初的代码核心贡献者这么写,后面的更新自然要保持一致。 风格没有对错,只要符合一些基本原则:一致性,简洁,限制编写代码时错误的产生。

对于++i,在Google公开的C++ Style有一条,分析了优缺点:

Preincrement and Predecrement

Use prefix form (++i) of the increment and decrement operators with iterators and other template objects.

Definition: When a variable is incremented (++i or i++) or decremented (--i or i--) and the value of the expression is not used, one must decide whether to preincrement (decrement) or postincrement (decrement).

Pros: When the return value is ignored, the "pre" form (++i) is never less efficient than the "post" form (i++), and is often more efficient. This is because post-increment (or decrement) requires a copy of i to be made, which is the value of the expression. If i is an iterator or other non-scalar type, copying i could be expensive. Since the two types of increment behave the same when the value is ignored, why not just always pre-increment?

优点:++i性能更好,特别对于非内置类型

Cons: The tradition developed, in C, of using post-increment when the expression value is not used, especially in for loops. Some find post-increment easier to read, since the "subject" (i) precedes the "verb" (++), just like in English.

缺点:i++写法在C中是种传统,而且主语在谓词前面更容易读

Decision: For simple scalar (non-object) values there is no reason to prefer one form and we allow either. For iterators and other template types, use pre-increment.



Sincerely, Ian Yang

Sent from Shanghai, 31, China

2009/5/5 Eric.Wang <wangsh...@gmail.com>

Eric.Wang

unread,
May 4, 2009, 11:54:32 PM5/4/09
to TopLanguage
是的。“改变群体的习惯是非常困难的”,那为什么要改变“== NULL”的习惯,而去迁就“NULL ==”的理论呢?

实际上这还是一个“理论重要”,还是“可读性重要”的问题。“理论”很具有迷惑性,在国内带坏了一批人。实际上优秀的项目都返璞归真,注重代码的可读性
甚于理论。

你的提醒很对。因为这里是没有利益纠葛的group,所以我才可以这么无所顾忌的发表观点呀。多多包涵,呵呵


On 5月5日, 上午11时41分, qiaojie <qiao...@gmail.com> wrote:
> 呵呵,你可以保留你的意见。我只是觉得你在这种习惯问题上如此执着,可能会在团队合作上出现一些障碍,个体去改变群体的习惯是非常困难的,在这种习惯问题上争论不休只会造成团队无谓的内耗。只是善意的提醒,如有冒犯请海涵。
>

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

pongba

unread,
May 4, 2009, 11:55:40 PM5/4/09
to pon...@googlegroups.com
大家光是在讨论i++和NULL==的话话题就狭窄了,因为就事论事这两个地方怎么写关系似乎都不是太大。

我相信大家都想从这个小例子泛化到一般情况,讨论一个较大的“编码风格和习惯”的问题,但泛化论点的时候需要注意这个泛化是否成立,比如对于NULL==还是==NULL的可读性问题,到底有多严重呢。

值得注意的是NULL==的可读性和一般情况下奇怪写法的可读性并不是同一个概念,一个是特例,一个是一般情况,不可简单类比的。是的,可读性 是一个非常重要的衡量标准,是的,很多时候奇怪的写法的确带来不可忽视的可读性成本,但这个一般性原则是否适用NULL==这个特例呢?还是那句话,it depends.

另外,我们在决策的时候容易陷入一个“最优化陷阱”,哪怕差别是如此的细微,也仿佛一定要比较出一个高下出来,难道不能就简单的接受这样一个论点:“两者都无所谓,差别是非显著的,与其为止费神半天,付出很大的时间成本,还不如省省力去做点别的呢”  :)

--
刘未鹏(pongba)
Blog | Mind Hacks
http://mindhacks.cn
TopLanguage
http://groups.google.com/group/pongba

chaoyan ma

unread,
May 4, 2009, 11:56:03 PM5/4/09
to pon...@googlegroups.com
~~~ 不如这样吧 大家习惯不一样的不妨各自组队 然后看看效果如何

2009/5/5 Eric.Wang <wangsh...@gmail.com>



--
最初的梦想

Fei Yan

unread,
May 5, 2009, 12:36:03 AM5/5/09
to pon...@googlegroups.com
我也同意这里举出来的例子很不恰当,造成口水横飞
这个东西压根儿就没有好多人想象的那么重要,如果想讨论其他一些东西,举出合适的例子再展开似乎更妥当些

“群众的眼睛是雪亮的”和“真理往往掌握在少数人手里”往往会冲突

2009/5/5 pongba <pon...@gmail.com>

Eric.Wang

unread,
May 5, 2009, 12:43:08 AM5/5/09
to TopLanguage

正面的例子已经有了,那就是这么多的优秀项目都是写“i++”和“NULL ==”的。反面的例子不好找,因为反面的例子都湮灭了。。。。

On 5月5日, 上午11时56分, chaoyan ma <chaoyan...@gmail.com> wrote:
> ~~~ 不如这样吧 大家习惯不一样的不妨各自组队 然后看看效果如何
>

> 2009/5/5 Eric.Wang <wangshaoq...@gmail.com>

Eric.Wang

unread,
May 5, 2009, 12:45:58 AM5/5/09
to TopLanguage
sorry,是"这么多的优秀项目都是写“i++”和“== NULL”的。

泡惯了bbs,帖子是可以编辑的。老是要修订自己的笔误,不好意思。

Eric.Wang

unread,
May 5, 2009, 1:25:42 AM5/5/09
to TopLanguage
++i/i++和NULL == p/p == NULL的写法确实很细微,但是这个问题的影响面却很广泛,几乎所有C++程序员都会面临这个选择。这
是我为什么认为这个问题值得讨论。
如果这个问题能够拓展到更广泛的范围,那很好;如果不能拓展,那么这两个问题本身也因为其广泛性而值得讨论。

有些公司会在代码规范里面强制要求写++i和NULL == p的格式,我认为这不但不近人情,而且通过损害可读性而损害了代码的质量。(我们公司没有
这两条见鬼的规定,但我知道有些公司是有的)。

可读性是难以量化的,因此在讨论的时候常常缺乏说服力。但是事实是有说服力的,这是我为什么去统计优秀项目做法的原因。

PS:为了减少笔误,我现在先在word里面写完了文章,又阅读了三遍才贴上来。希望能减少笔误。。。。。

Ian Young, Yingcai

unread,
May 5, 2009, 1:53:52 AM5/5/09
to pon...@googlegroups.com
1) 统计的项目都是 C,++i 和 i++ 是不存在效率问题的。可以统计下 stl 的 algorithm 或者 boost 中关于 iterator 的库,这些库里面的 i++ 对性能的影响还是可观的。

SGI版bits/stl_algo.h中:
++i  212行
i++  2行,都用在ptrdiff_t上



2) 觉得记 “ 如果可能,尽量使用 ++i " 比 "使用i++, 当效率比可读性重要时使用++i" 容易。一是一致性,二是什么时候效率>可读性不好把握。

huangchao

unread,
May 4, 2009, 11:22:49 PM5/4/09
to TopLanguage
刚才用gcc做了个实验,
--------------------------------------------test.c
int main()
{
int i;
++i;
return 0;
}
--------------------------------------------test2.c
int main()
{
int i;
i++;
return 0;
}
#gcc -S test.c
#gcc -S test2.c
得出的汇编代码其实是一样的
-------------------------------------------testx.s
.file "testx.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
addl $1, -8(%ebp)
movl $0, %eax
addl $16, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
.section .note.GNU-stack,"",@progbits
我猜现在的编译器估计已经很强大了,保持好的习惯当然更好

On May 3, 11:05 pm, "Eric.Wang" <wangshaoq...@gmail.com> wrote:
> 1,"++i"和"i++",何者是更好的代码风格?
> 2,"NULL =="和"== NULL",何者是更好的代码风格?
>
> 我提出这两个问题,是源于理论和实践的脱节。
>
> ++i在很多情况下可以有更好的性能。"NULL =="可以避免"=="被误写为"="。
> 从理论上来看,这似乎应该是更好的代码。反对的理由不太站得住脚:习惯、顺眼。
>
> 但是我看了一些优秀的开源项目代码,发现大多数都是写成"i++"和"== NULL"的。
>
> 当理论和实践出现脱节的时候,你们会选择相信理论,还是跟从实践?

Korben Zhang

unread,
May 5, 2009, 1:58:13 AM5/5/09
to pon...@googlegroups.com
++i,i++?除非你是严重要求性能的,这对于性能的影响绝对没有那么重要。

编译最快,最接近机器语言,DSL最慢,但开发效率更高,一句顶十句。


2009/5/5 Eric.Wang <wangsh...@gmail.com>:


> ++i/i++和NULL == p/p == NULL的写法确实很细微,但是这个问题的影响面却很广泛,几乎所有C++程序员都会面临这个选择。这
> 是我为什么认为这个问题值得讨论。
> 如果这个问题能够拓展到更广泛的范围,那很好;如果不能拓展,那么这两个问题本身也因为其广泛性而值得讨论。

--
Korben Zhang
http://sites.google.com/site/korbenzhang/

Jason

unread,
May 5, 2009, 3:23:10 AM5/5/09
to TopLanguage
记得看过某本 C++ 的书上写 ++i 是为了操作符重载时方便,我也不了解~

Ian Young, Yingcai

unread,
May 5, 2009, 3:56:41 AM5/5/09
to pon...@googlegroups.com
区别在于

struct XX {
    XX& operator++() {
        ++p_;
        return *this;
    }

    XX operator++(int) {
        XX tmp = *this;
        ++p_;
        return tmp;
    }

private:
   YY p_;
}

i++需要临时对象保存++之前的状态

Sincerely, Ian Yang

2009/5/5 huangchao <huangc...@gmail.com>

胡翟

unread,
May 5, 2009, 3:49:59 AM5/5/09
to pon...@googlegroups.com

内置类型本来就是一样的啊
++i是在i是类对象或者iterator等的时候比i++好
2009/5/5 huangchao <huangc...@gmail.com>

sagittarius.boy

unread,
May 5, 2009, 3:51:03 AM5/5/09
to TopLanguage
++i 不需要构造临时变量
而 i ++ 则需要构造一个临时变量
 

sagittarius.boy
2009-05-05

发件人: Jason
发送时间: 2009-05-05 15:49:09
收件人: TopLanguage
抄送:
主题: [TL] Re: 有争议的代码风格

XiongJia Le

unread,
May 5, 2009, 5:20:48 AM5/5/09
to pon...@googlegroups.com
int 好像差不多,看 STL 的 iterator 里的写法比较明显.

        const_iterator& operator++()
            {    // preincrement
            _Ptr = _Nextnode(_Ptr);
            return (*this);
            }

        const_iterator operator++(int)
            {    // postincrement
            const_iterator _Tmp = *this;
            ++*this;
            return (_Tmp);
            }


2009/5/5 胡翟 <hudi...@gmail.com>

chaoyan ma

unread,
May 5, 2009, 7:37:00 AM5/5/09
to pon...@googlegroups.com
哦~ 我知道了 您的意思是 在未知i++ 和++i的方式下进行的统计 没有得到对应的解是吧?
呵呵 我觉得 这个 可能还要考虑更多的因素在里面 比如 使用++i的作者的权威
 其相关++i了解的程度(比如他是搞过编译器或者知道汇编)这个时候需要给这个部分的统计加上(乘于)相应的权重
 
i++ 和++i 这样比较明确的例子只是判断正误的问题
而关于 其它没有答案 只有习惯的问题  那么统计的时候 对不同的集合 应该相应的再拓展相连的因素
比如 还是上面的例子吧  统计出i++ 和++i 的两个集合 然后 再这两个集合的基础上 再统计代码的出处 作者 作者职位  …… 等等 你感兴趣的因素
然后 可以初步臆断一下 i++ 和++i 分别适合什么场合

 
2009/5/5 Eric.Wang <wangsh...@gmail.com>


正面的例子已经有了,那就是这么多的优秀项目都是写“i++”和“NULL ==”的。反面的例子不好找,因为反面的例子都湮灭了。。。。



 

--
最初的梦想

chaoyan ma

unread,
May 5, 2009, 7:40:09 AM5/5/09
to pon...@googlegroups.com
呵呵 不好意思
没学过类似人工智能 机器学习之类的课程 不过 我怎么觉得有点像神经网络的东东了……
不过本来 机器的学习方式 就是模仿人的……

 

居振梁

unread,
May 5, 2009, 7:56:29 AM5/5/09
to pon...@googlegroups.com
呵呵,又开始自言自语了

chaoyan ma

unread,
May 5, 2009, 7:58:10 AM5/5/09
to pon...@googlegroups.com
~~~ 这个叫自言自语?

2009/5/5 居振梁 <juzhe...@gmail.com>



--
最初的梦想

CoreWar

unread,
May 5, 2009, 8:19:58 AM5/5/09
to TopLanguage
这位老大太能扯了......

On 5月5日, 下午7时37分, chaoyan ma <chaoyan...@gmail.com> wrote:
> 哦~ 我知道了 您的意思是 在未知i++ 和++i的方式下进行的统计 没有得到对应的解是吧?
> 呵呵 我觉得 这个 可能还要考虑更多的因素在里面 比如 使用++i的作者的权威
> 其相关++i了解的程度(比如他是搞过编译器或者知道汇编)这个时候需要给这个部分的统计加上(乘于)相应的权重
>
> i++ 和++i 这样比较明确的例子只是判断正误的问题
> 而关于 其它没有答案 只有习惯的问题 那么统计的时候 对不同的集合 应该相应的再拓展相连的因素

> 比如 还是上面的例子吧 统计出i++ 和++i 的两个集合 然后 再这两个集合的基础上 再统计代码的出处 作者 作者职位 ...... 等等 你感兴趣的因素

chaoyan ma

unread,
May 5, 2009, 8:36:58 AM5/5/09
to pon...@googlegroups.com
呵呵 不好意思
学过一点点数据挖掘  言论无实据 仅供参考
2009/5/5 CoreWar <Mete...@gmail.com>
这位老大太能扯了......
 

OxFAN

unread,
May 5, 2009, 8:52:27 AM5/5/09
to pon...@googlegroups.com
对基本类型++i和i++没什么区别
对ADT就不一样了。i++会产生一个临时对象,并复制i到临时对象里,这里多了一个额外的复制过程。

很明显,在oop中前缀更好一些。特别是大量使用STL的代码中前缀有绝对的性能优势。

在c里,几乎没有性能上的差别...

so,这个问题能结束了吗?

legendsland

unread,
May 5, 2009, 12:39:56 PM5/5/09
to pon...@googlegroups.com
看了回帖,闲扯一下,不喜勿看。。。呵呵

个人感觉这个话题像是在讨论:
为自己欣赏的风格品味找到一个基本上可以服众的靠谱理由。
可惜代码、编程并不完全像是在码文字或者画画。编码可以自由
发挥的风格空间确实有限,而且特别当有时间期限或者进度约束
的时候,再加上是多人参与的游戏。。。

实际上,从现实的角度来看,是否要求所有的开发人员按照这种
规范去做本身就值得考虑:
1. 作为敬业的程序员是否容忍将自己的喜好盖过工作规范要求?
(作为矛盾的)2.作为坚持自己风格(对编码的理解)的程序员
是否容忍自己并不欣赏(甚至鄙视)的风格?

妥协?还是坚持呢?。。。不好意思,扯远了。这一点我想就是
软件技术人员和其他行业的技术人员最大的不同:也许当你尝试
这去盖一座教堂的时候,给你发钱的人认为你不过是在码砖。

风格只是针对艺术家而言的。但是(中国的)程序员真的可以
自诩为艺术家吗?

ps:我的“品味”是喜欢 xxx == NULL 讨厌 NULL == xxx, 不过好像
最近习惯了后者也觉得无所谓了,特别是compiler报不能给constant
赋值的时候,还是很感激这个NULL == 。(很明显,在这个问题上我
是现实主义者)


2009/5/3 Eric.Wang <wangsh...@gmail.com>

居振梁

unread,
May 5, 2009, 8:49:19 PM5/5/09
to pon...@googlegroups.com
跑题

(特指)在程序员中自诩为艺术家,假设这是成立的。不是更适合解决风格问题吗?
通常此类人都是比较牛的,不会只纠缠于一门语言,至少同时精通并使用多门语言的概率要远远大于其他人,这么一来接触不同风格(相对他的第一门语言)语言便几乎是必然的。在众多语言(风格)里切换,想必就是艺术家应达到的基本层次(也许在别人看来是很高的境界)吧?

对上述“精通”的定义:对于特定的语言,掌握所有语法和语言特性,能写出符合该语言思想的程序,并且熟悉所有关于此语言的规范、约定等一些列非硬性规定的条目。
PS:这里不包括能很好的解决语言所面向的领域的问题的能力,因为这是一个无底洞,没有极限,难以量化。

2009/5/6 legendsland <legen...@gmail.com>

风格只是针对艺术家而言的。但是(中国的)程序员真的可以
自诩为艺术家吗?

DaiZW

unread,
May 5, 2009, 9:07:16 PM5/5/09
to pon...@googlegroups.com
我有个疑问, 想问那些主张"NULL =="的同学:

因为"NULL =="不符合逻辑习惯,
所以每次遇到需要写"NULL =="或者"== NULL"的时候思维都会停一下, 然后决定用"NULL =="来代替"== NULL",
那么, 有这个思维停顿的时间, 为什么不用它来检查一下是"=="还是"="呢?

chaoyan ma

unread,
May 5, 2009, 10:28:10 PM5/5/09
to pon...@googlegroups.com
呵呵 我觉得 这个停顿只是在习惯转变的阶段才会存在
过渡期过后 就很自然而然变成逻辑习惯了

2009/5/6 DaiZW <shinys...@gmail.com>

up duan

unread,
May 5, 2009, 10:43:20 PM5/5/09
to pon...@googlegroups.com


2009/5/3 Eric.Wang <wangsh...@gmail.com>
以lighttpd的代码为例子

http://www.lighttpd.net/download/lighttpd-1.4.22.tar.gz

里面的代码我摘录几段:

array.c:
for (j = a->used; j < a->size; j++) a->data[j] = NULL;

mod_scgi.c:
for (i = 0; i < f->used; i++) {

server.c:
for (i = 0; i < FILE_CACHE_MAX; i++) {

request.c
for (; *c && *c != ']'; c++) {

有优秀的项目用i++,也有优秀的项目用++i,除非你遍历所有项目【或者至少大部分】,否则你不能证明什么。
更何况,优秀的项目也不一定是使用i++或者++i而变得优秀的,所以,就算你能证明大多数优秀的项目都使用了i++或者++i,也不能证明i++或者++i某个更好。
不能因为某个优秀的人说他爱吃六味地黄丸就确认六味地黄丸比无谓地黄丸更好一样,因为优秀的人可能只是在别的方面优秀,而在医药方面不优秀甚至很不优秀。

chaoyan ma

unread,
May 5, 2009, 10:48:50 PM5/5/09
to pon...@googlegroups.com
呵呵 说到这个的又想起来了 数量并不能代表什么 如果两个人写代码 优秀的人写++i 只写了其中1/10 另一个写了i++ 但是写了9/10
那统计就不太正确了 可能统计要按照作者进行 而不是单纯的++i / i++的数目吧

2009/5/6 up duan <fix...@gmail.com>



--
最初的梦想

Roof

unread,
May 6, 2009, 12:12:38 AM5/6/09
to TopLanguage
天啊,说句心里话,这样的讨论,何必呢……
只想说,对我而言,如果项目不严加要求,那么我会写NULL==,因为我宁愿有些人读起来别扭一点,
也要扼杀我不小心写出(p=NULL)这种状况的可能性,理由是,我就曾经犯过这种错。
如果有人读起来觉得别扭,那很抱歉,我很乐意请他喝杯咖啡贿赂贿赂。看多了自然不会别扭了。
至于为什么那么多优秀项目用i++多过++i,我想,肯定有其理由,但仅仅具有参考价值。这里面是质
量原因还是历史原因,有待考察。就我而言,已经习惯了写++i,我实在找不出有什么理由一定要换回
来。
两个论点:
1、理论上正确的,不一定在实践中吃香。
2、大多数优秀项目采取的做法不一定是一定要跟从的做法,虽然肯定有它们的理由。
对于p==NULL还是NULL==p,我觉得有个衡量标准,就是,如果你会犯if ( p = NULL )这种错误,或者
你的代码里,有“正确的”if ( p = NULL )这样的语句,你的本意就是赋值,那么还是乖乖的写“理论正确”
的写法吧,不然恐怕大伙对你没信心。如果你从不犯错,那谁怪罪你呢。
不要强求,这没什么大的讨论价值,窃以为。

aleung

unread,
May 6, 2009, 1:25:55 AM5/6/09
to TopLanguage
即使++i比i++效率要高,但对应用的整体性能影响有多大呢?
我不负责任的估计,99%的应用的性能都不会因为使用++i或i++带来什么影响。
如果是这样,拘泥于这样的性能又有什么意义?

On May 5, 9:58 am, chaoyan ma <chaoyan...@gmail.com> wrote:
> 这个就不太同意了 ++i 和i++ 在人看来没什么太大区别(不会带来理解上的困难和强烈的不适应)
> 但是对编译器来说 ++i比 i++效率更高 做的工作更少 那么为什么不用++i 呢~
>

wizard

unread,
May 6, 2009, 2:32:12 AM5/6/09
to pon...@googlegroups.com
写++i就是品味差吗?这个论断有点太大胆了吧
++i比i++的效率更高,这是没有任何疑问的事情
如果i是整型,那或许这种效率差别并不很大,但是如果i是迭代器,那么在某些需要大量循环的例子中,++i和i++在性能上的区别很可能是决定性的。

2009/5/4 Eric.Wang <wangsh...@gmail.com>:
>
> 设计确实更能体现好的品味,清爽的设计和纠结的设计更能体现程序员的品味。不过设计的好坏更难评估,好的设计通常也是平平无奇的,你通常只能从结果来判
> 断,这个设计是好的。当你看到一个平平无奇的设计的时候,你很难凭空判断这个设计是好的还是坏的,一个设计的好坏,通常是和具体应用环境相关的。在这里
> 是个好设计,在那里可能就是个坏设计。
>
> 从代码的细处,也是能看出程序员的价值取向和品味的。能否把代码写得清晰简洁美观,除了基本功,还需要程序员的品味。比如,喜欢写“++i”或
> 者“NULL ==”的家伙,品味相对来说可能就差了点,因为他们仅仅根据不可靠的网上文章(比如林锐那篇编程指南)或者不完整的理论,就写出了让自己
> 也让别人别扭的代码。
>
> 设计确实更能体现程序员的品味,但是编码更直观更更容易检验。
>
>
> On 5月4日, 上午8时28分, Jay True <glac...@gmail.com> wrote:
>> 好的品味难道非得从这种地方才能看出来的么?
>>
>> 我不是说从这种地方看不出来,不过我觉得设计才更能体现吧?
>>
>> 以上。
>>
>> --
>> 歌词唱清楚,不是周杰伦
>> Home Page:http://glacjay.is-a-geek.org/blog/

翁翊成

unread,
May 6, 2009, 4:39:42 AM5/6/09
to pon...@googlegroups.com
习惯就好.

2009/5/6 wizard <klin...@gmail.com>

OxFAN

unread,
May 6, 2009, 1:49:18 AM5/6/09
to pon...@googlegroups.com
Totally Wrong!
即使++i比i++效率要高,但对应用的整体性能影响有多大呢?
很明显,你不了解为什么++i比i++效率高。前面的帖子已经说的比较清楚了。
而且照这么说,很多的性能优化对整体性能的影响都可以被忽略。
      对尾递归的优化可以被忽略,函数定义为内联可以被忽略,使用对象引用而不是对象本身做参数可以被忽略.....
我不负责任的估计,99%的应用的性能都不会因为使用++i或i++带来什么影响。
这样的估计的确不负责任。

正是这些细小的优化最终使真个程序或模块的性能得到提高,从而增强了用户的体验,对这些细节不重视的人写不出高质量的代码,也做出不优秀的软件。
程序性能也是整个软件是否对人友好的一个重要参考。
2009/5/6 aleung <leol...@gmail.com>

chaoyan ma

unread,
May 6, 2009, 5:34:34 AM5/6/09
to pon...@googlegroups.com
呵呵 不如 写个程序 把i++都改成++i   注意前面初始化-1   皆大欢喜 
不过不知道 替换有没有逻辑错误 

chaoyan ma

unread,
May 6, 2009, 5:40:05 AM5/6/09
to pon...@googlegroups.com
重载那些……

qiaojie

unread,
May 6, 2009, 5:44:36 AM5/6/09
to pon...@googlegroups.com
2009/5/6 OxFAN <oday...@gmail.com>

Totally Wrong!
即使++i比i++效率要高,但对应用的整体性能影响有多大呢?
很明显,你不了解为什么++i比i++效率高。前面的帖子已经说的比较清楚了。
而且照这么说,很多的性能优化对整体性能的影响都可以被忽略。
      对尾递归的优化可以被忽略,函数定义为内联可以被忽略,使用对象引用而不是对象本身做参数可以被忽略.....
我不负责任的估计,99%的应用的性能都不会因为使用++i或i++带来什么影响。
这样的估计的确不负责任。

正是这些细小的优化最终使真个程序或模块的性能得到提高,从而增强了用户的体验,对这些细节不重视的人写不出高质量的代码,也做出不优秀的软件。
程序性能也是整个软件是否对人友好的一个重要参考。


没有数据的证明,性能优化就会成为瞎掰。
写成i++虽然会多产生一个临时变量,但是你怎么知道编译器就不会把这个无用的临时变量优化掉呢?既然编译器有RVO优化,这种无用的临时变量赋值被内联展开以后编译器一样可以判断出是无用代码,可以被去除掉。就算有些编译器不做这个优化,但是多一次临时变量会影响多少效率呢?没有测试数据的话真是的没法估计。据我个人经验,对一般非平凡的循环体多一次临时变量赋值其影响不可能超过1%,谁要是有空的话,可以写个测试用例。


 

qiaojie

unread,
May 6, 2009, 5:52:45 AM5/6/09
to pon...@googlegroups.com
再补充一下
其实 ++i 跟 i+=1,i=i+1 是一样道理的,当编译器把代码内联展开以后,可以做很多优化工作的,这三种写法最终得到的代码是一样的。
说了半天还是建议大家不必太执着于这些无聊的小地方,不要教条化,多把时间用于有意义的方面吧。








2009/5/6 qiaojie <qia...@gmail.com>

Jeffrey Zhao

unread,
May 6, 2009, 9:10:36 AM5/6/09
to pon...@googlegroups.com
呀,如果不是计算密集型,或者说对性能要求极高的场合,i++或++i的确无所谓啦。
 
你看一个跨进程通信,一个数据库查询开销多少,i++这种真的不算什么。
 

Jiaxin Huang

unread,
May 6, 2009, 10:33:18 AM5/6/09
to pon...@googlegroups.com
倘若在性能要求高的场合使用 ++i, 在要求不高的地方用 i++, 整个项目或者整个公司的 coding style 就会不一致。

所以
第一,真个项目,整个公司必须统一使用同一种 coding style, ++i 或者 i++
第二,如果公司不 care 性能方面的问题,或者公司对所谓的品位有执着的追求,那就全用 i++, 没问题
如果公司认为虽然只有 5% 的地方会有性能上的问题,但为了全公司统一,全部用 ++i, 没问题

对于职业的IT民工来说,我相信不用一个星期就能从一种 style 转换到另外一种 style.

2009/5/6 Jeffrey Zhao <je...@live.com>:

--
--

To be a betterman.

Jeffrey Zhao

unread,
May 6, 2009, 10:37:07 AM5/6/09
to pon...@googlegroups.com
我倒还真没觉得这个地方不一致会造成多大问题——别推而广之,我就是指++i和i++。

除此之外我还真想不到类似的问题。

--------------------------------------------------
From: "Jiaxin Huang" <better...@gmail.com>
Sent: Wednesday, May 06, 2009 10:33 PM

qiaojie

unread,
May 6, 2009, 10:50:05 AM5/6/09
to pon...@googlegroups.com
一般在我主导的项目开发中,我不会强制规定代码规范。程序员是需要保持一定的个性的,你把他们当代码民工,强制规定一些规范,遇到一些个性强的人会产生抵触情绪,不可能很好的发挥每个人的创造力。其实很多风格方面的东西只是一些习惯不同而已,不存在什么原则性的问题,有时候我自己也会在代码中尝试几种不同的风格或者玩玩奇巧淫技,编程是件有趣的事情,不要搞的太死板。
不过,代码的格式化我会要求统一,这个可以有工具自动完成,如果格式不统一的话merge会有大麻烦,这个是没有办法的。
 
 


 
2009/5/6 Jiaxin Huang <better...@gmail.com>

OxFAN

unread,
May 6, 2009, 8:06:16 AM5/6/09
to pon...@googlegroups.com
++i,和i++的性能问题无需证明。
我也忘了说明一点,对基本类型,两个效率没有差别。在c中也就没区别,不过在c++中,当i为对象时,确实会产生临时对象,并调用复制函数,这样的数据不需要我单独拿出来,无论是书上还是反汇编等都给出了。

另外我用你反驳我的理由反驳你一次:你又没有拿出编译器将这种差异优化掉的真实数据怎么就说明没有这种差异?

我也补充几点 :
  • i+=1,i=i+1 的行为也不一样,一样的道理,同样无需我在这里证明。
  • 至于“编译器的优化”,这是个非常笼统的概念,不具一般性和代表性,它跟编译器的实现、版本、优化等级,是否开优化等等等等有关。如果非要说明有这样的优化,也应该具体到那个编译器的哪个版本和哪个编译参数。
结语:我也认为这问题没有太多讨论的价值,对于上述几种表达式的性能问题是已定义的,仅为说明此事实。
2009/5/6 qiaojie <qia...@gmail.com>

qiaojie

unread,
May 6, 2009, 12:29:31 PM5/6/09
to pon...@googlegroups.com
好吧,看来我真的是要去做件无聊的事情了

int test(vector<int>& v)
{
int total = 0;
for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
total += *it;
return total;
}

下面是这段代码我用VS2008 release版编译出来的结果。为了看起来简单一些我把
_SECURE_SCL关闭了,这样可以减少很多check代码,影响大家的视线。

PUBLIC ?test@@YAHAAV?$vector@HV?$allocator@H@std@@@std@@@Z ; test
; Function compile flags: /Ogtpy
; File c:\documents and settings\qiaojie\desktop\test\test\test.cpp
; COMDAT ?test@@YAHAAV?$vector@HV?$allocator@H@std@@@std@@@Z
_TEXT SEGMENT
_v$ = 8 ; size = 4
?test@@YAHAAV?$vector@HV?$allocator@H@std@@@std@@@Z PROC ; test, COMDAT

; 10 : int total = 0;
; 11 : for(vector<int>::iterator it = v.begin(); it != v.end(); it++)

mov edx, DWORD PTR _v$[esp-4]
mov ecx, DWORD PTR [edx+4]
mov edx, DWORD PTR [edx+8]
xor eax, eax
cmp ecx, edx
je SHORT $LN1@test
$LL16@test:

; 12 : total += *it;

add eax, DWORD PTR [ecx]
add ecx, 4
cmp ecx, edx
jne SHORT $LL16@test
$LN1@test:

; 13 :
; 14 : return total;
; 15 : }

请注意看循环体的代码:
$LL16@test:

; 12 : total += *it;

add eax, DWORD PTR [ecx]
add ecx, 4
cmp ecx, edx
jne SHORT $LL16@test


没有临时变量没有变量赋值,说明编译器完全可以实现这个优化。

2009/5/6 OxFAN <oday...@gmail.com>

up duan

unread,
May 6, 2009, 9:26:23 PM5/6/09
to pon...@googlegroups.com


2009/5/6 qiaojie <qia...@gmail.com>

一般在我主导的项目开发中,我不会强制规定代码规范。程序员是需要保持一定的个性的,你把他们当代码民工,强制规定一些规范,遇到一些个性强的人会产生抵触情绪,不可能很好的发挥每个人的创造力。其实很多风格方面的东西只是一些习惯不同而已,不存在什么原则性的问题,有时候我自己也会在代码中尝试几种不同的风格或者玩玩奇巧淫技,编程是件有趣的事情,不要搞的太死板。
不过,代码的格式化我会要求统一,这个可以有工具自动完成,如果格式不统一的话merge会有大麻烦,这个是没有办法的。
 
代码格式难道不是编码规范的一部分?就我的理解,它应该是它最主要的一部分吧。 

aleung

unread,
May 7, 2009, 1:53:10 AM5/7/09
to TopLanguage
我开发软件时,对性能考虑主要集中在两个阶段:

设计阶段 - 设计是否有性能隐患?例如不必要的远程调用,不合适的数据库查询方式。特别是涉及架构上的问题,做出来后是很难再调优的。
测试阶段 - 做性能测试,看看是否已经达到预定的性能要求。如果没有达到需求,通过各种工具分析性能瓶颈在哪里,找出关键影响因素进行调优。

我同意程序性能也是整个软件是否对人友好的一个重要参考,但怎样才算是性能足够好?必须要有个衡量的指标,性能的调优可以是无穷无尽的,但实际上并不需
要榨干每一毫秒。如果处理用户的一次请求只需要500ms,那么你把它优化成450ms也不会带来什么用户体验的提升。

确实,在我做过的软件中,基本上都不用怎么关注尾递归、函数内联、对象引用的问题,因为它们并没有成为性能瓶颈。我会选择一种让代码容易理解、维护的方
式来做。如果真的发现某处代码由于没有考虑这些因素成为了性能瓶颈,通过重构来修改也是轻而易举的事情。


On May 6, 1:49 pm, OxFAN <odayf...@gmail.com> wrote:
> Totally Wrong!
>
> > 即使++i比i++效率要高,但对应用的整体性能影响有多大呢?
>
> 很明显,你不了解为什么++i比i++效率高。前面的帖子已经说的比较清楚了。
> 而且照这么说,很多的性能优化对整体性能的影响都可以被忽略。
> 对尾递归的优化可以被忽略,函数定义为内联可以被忽略,使用对象引用而不是对象本身做参数可以被忽略.....
>
> > 我不负责任的估计,99%的应用的性能都不会因为使用++i或i++带来什么影响。
>
> 这样的估计的确不负责任。
>
> 正是这些细小的优化最终使真个程序或模块的性能得到提高,从而增强了用户的体验,对这些细节不重视的人写不出高质量的代码,也做出不优秀的软件。
> 程序性能也是整个软件是否对人友好的一个重要参考。

> 2009/5/6 aleung <leoli...@gmail.com>

OxFAN

unread,
May 7, 2009, 9:30:55 AM5/7/09
to pon...@googlegroups.com
看到了你的数据,vc2008确实这样。其实我也知道编译器能很轻松的对之进行优化,可能是主观强调的缘故吧,不过我想的是尽可能写通用代码,使在不同系统不同编译器上表现出的差异尽可能的小。
实话说,我还没有毕业,对行业里的实际情况都不很了解。
下面的几篇也都看了,感觉很受用
thx
2009/5/7 qiaojie <qia...@gmail.com>
Reply all
Reply to author
Forward
0 new messages