打印

关于递增(++)/递减(--)运算符

[复制链接]
楼主: lenglx
手机看帖
扫描二维码
随时随地手机跟帖
21
huangqi412| | 2007-11-28 17:21 | 只看该作者 回帖奖励 |倒序浏览

还是多用括号好

使用特权

评论回复
22
mohanwei| | 2007-11-28 20:19 | 只看该作者

不要去钻这种牛角尖了,不同编译器给你的结果是不一样的

所以,不要吝啬使用“()”,在每一个可能混淆的地方都放一对“()”……

使用特权

评论回复
23
dai_weis| | 2007-11-28 20:41 | 只看该作者

LZ的目的是好的

希望不要误解,我认为LZ文中前半部分解释了关于++和--分置前后的问题是不错的了,而且对不太清楚的朋友也有帮助。
不过,后半部分++++多了就没有什么意思了,我的看法遇到这么多+的程序不看也罢,纯粹的个人表现,LZ能指出分析结果大家可以借鉴,但不见得要分析。
当然,我认为打写++++人的屁股到死(不包括LZ范文中的那么多+)还是赞成的。

使用特权

评论回复
24
computer00| | 2007-11-28 20:56 | 只看该作者

是的,楼主的出发点是好的,但是结论是错误的,

结论应该是:我们要在程序中尽量避免这些另人误解的代码。简洁至上。

使用特权

评论回复
25
lenglx|  楼主 | 2007-11-28 21:05 | 只看该作者

这段话我做为结贴语

这里解释的关于++的东西在任何标准C编译器下都合适.
不会有什么不同的编译器产生不同的结果出现.

其次,象++++这种情况,并非不会出现.尤其在C++类中,如果你重载了++操作符的情况下,会不知不觉的出现,而且你没有机会去加个括号在里面,即使你能加个括号, ++(++)这种形式,不见得比++++直观,也不见得就不会引起歧义.


你可以尝试在任何C/C++编译器中编译,保证不会出现不同的情况.

使用特权

评论回复
26
平常人| | 2007-11-28 21:06 | 只看该作者

这是软件工程之大忌,这样的东西除了可以用来炫耀,只能

不但害别人而且害自己!!

使用特权

评论回复
27
qihao| | 2007-11-28 21:07 | 只看该作者

有意思~

使用特权

评论回复
28
simon21ic| | 2007-11-28 21:15 | 只看该作者

这个谈不上什么技巧的,C语言的基础知识

但实际如果别人的代码这个使用的话,我一定不高兴去看
记得以前有人发过一个一行代码实现一个什么格式的输出,基本没有可读性

使用特权

评论回复
29
computer00| | 2007-11-28 21:16 | 只看该作者

楼主,把你所说的能够编译通过的3和4拿去VC或者keil等环境编

或者其它编译环境,能有几个可以通过编译的?


使用特权

评论回复
30
hellomcu| | 2007-11-28 23:05 | 只看该作者

呵呵,关于C++的重载,再说两句。

 呵呵,关于C++的重载,再说两句。
    当年老师给我们上课的时候,在说完算术运行符进行重载后,敲着黑板对我们说,这个要十分小心,如果不是十分必要,和十足的把握,最好不要用它。
    保证程序的通俗性、可读性比花式更为重要,剑走边锋的事。。。。。。。
相关链接:http://shop35088126.taobao.com

使用特权

评论回复
31
hotpower| | 2007-11-28 23:57 | 只看该作者

迷茫之中~~~以括号为生...

使用特权

评论回复
32
mohanwei| | 2007-11-29 23:08 | 只看该作者

有时候为了让一个公式令人(或者是我自己)看起来能

看的更明白、直观,我都不惜多定义几个中间变量,像上学时演算一样……

我发现,编译出来的汇编代码几乎是一样的……看来现在编译器的智商都很高^_^

使用特权

评论回复
33
su_mj000| | 2007-11-30 03:08 | 只看该作者

我对LZ这个帖子倒是感兴趣的

通过对指针变量的操作研究,无疑能加深对语言的驾驭能力,
并在日后的工作避免一些可能的错误。

只了解下列指针运用显然还不够:
*p++
*++p
*(p+x)

其他如:

(*p)++
++(*p)

也是必需的。LZ在11楼的发言是有道理的。

个人以为,*(p+x)的用法不太严瑾。改用p[x]会更直观、更严谨。
而两者的实际效率应该是相同的。


使用特权

评论回复
34
wlsui| | 2007-12-3 23:11 | 只看该作者

当我刚打开网页看到楼主的帖时:

当我刚打开网页看到楼主的那堆 + 号时,第一反应就是楼主要挨批了,其实我和大部分人的心情和意见一样。
程序第一是稳定可靠,第二是可维护性。可维护就要求可读性好。如果是在为公司开发软件,对于可读性很差的程序会随着你离开这个公司而一起离开这个世界。

使用特权

评论回复
35
athlon64fx| | 2007-12-3 23:20 | 只看该作者

re:

此帖无意义
签定完毕

使用特权

评论回复
36
tyrone3000| | 2007-12-4 12:46 | 只看该作者

这个帖子经典.占个位!

使用特权

评论回复
37
黄盛桦| | 2007-12-4 23:35 | 只看该作者

有意思

    2>    ++i++;        // 不能编译, 因为++运算符是右结合的, 所以先计算i++, 结果作为左边++的操作数.
                    // 但i++的返回结果是不能作为左值使用的.
                    
    3>    (++i)++;    // OK. (++i)的结果作为 后置++的操作数
                    // 结果 i 加了2次
                    
    4>    ++i = 5;    // OK; ++i的返回结果是可以作为左值的
                    // 最后i的结果等于5

   这个不太赞同的,++i,i++都不能作为左值.用了C30编译器是编译不通过的。当然以C99为准,有空时再找找C99怎么描述的。

   基本概念的理解,有助于写出移植性好的代码,而不依赖于具体编译器。
比如:a = i++;结果是未定义的,取决于具体编译器。

    

使用特权

评论回复
38
dragon_hn| | 2007-12-4 23:43 | 只看该作者

没多大意义

不同的编译器不一样,即使同一个编译器的不同版本,对不同语法的解释结果也有时不一样.
跟楼上大多数人意见一样,平时多用(),尽量少产生歧义.

使用特权

评论回复
39
eleclike| | 2007-12-5 01:46 | 只看该作者

多用几个()不就可以了么

不过LZ可能考虑到了编译器的深层次问题了

使用特权

评论回复
40
xieqin| | 2007-12-6 09:15 | 只看该作者

写程序很重要的一点是保证让其它人看得懂

让其它人看得懂的同时,又不能对其它人的能力和水平提出过高的要求.

"++++i;    //ok"

能说什么? 顶多可以参加个最差风格奖入选赛,能不能入围还是另外一回事。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则