找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 317|回复: 9

关于"++"的问题

[复制链接]
发表于 2009-11-6 01:42:54 | 显示全部楼层 |阅读模式 IP:江苏扬州
先来看下面一段简单代码:

#include <iostream>

using namespace std;

int main()
{
int s = 0, p;

p = ++s + ++s + ++s;

cout << p << endl;

system("PAUSE");
return EXIT_SUCCESS;
}//main()

在DEV C++上编译后,输出结果为7,如果只有 ++s + ++s,则输出结果为4.
在Borland C++上编译后,输出结果为9,如果只有 ++s + ++s,输出结果也为4.
由此可以说明,不同的编译器对多个"++"的计算的编译是不同的.

我想问问,为什么Dev C++输出为7,而Borland C++输出的为9.在编译时发生了什么事.谢谢赐教!

还有,我发现了一个问题- -!原来Kaspersky会把所有没有输出指令的程序视为含有恶意代码的程序处理- -!
发表于 2009-11-6 01:42:55 | 显示全部楼层 IP:江苏扬州
这个问题以前看到过。

我的理解是,这是种不好的书写方法,避免这样用就行了。
相当于给编译器找麻烦。
回复

使用道具 举报

发表于 2009-11-6 01:42:56 | 显示全部楼层 IP:江苏扬州
怎么回事啊,不论怎么算也不会那样啊,奇怪
回复

使用道具 举报

发表于 2009-11-6 01:42:57 | 显示全部楼层 IP:江苏扬州
  1. 其实说难也不难理解为什么是7
  2. 我们看看代码就知道了

  3. movl $0, -12(%ebp) // s=0
  4. movl $0, -8(%ebp) // p=0
  5. addl $1, -12(%ebp) //s=1
  6. addl $1, -12(%ebp) //s=2
  7. movl -12(%ebp), %eax //%eax=2
  8. addl -12(%ebp), %eax //%eax=4
  9. addl $1, -12(%ebp) //s=3
  10. addl -12(%ebp), %eax //%eax=7
  11. movl %eax, -8(%ebp) //p=%eax
复制代码
回复

使用道具 举报

发表于 2009-11-6 01:42:58 | 显示全部楼层 IP:江苏扬州
汇编....
回复

使用道具 举报

发表于 2009-11-6 01:43:00 | 显示全部楼层 IP:江苏扬州
呵呵!
回复

使用道具 举报

发表于 2009-11-6 01:43:01 | 显示全部楼层 IP:江苏扬州
汇编看不懂....
回复

使用道具 举报

发表于 2009-11-6 01:43:03 | 显示全部楼层 IP:江苏扬州
在自己知道的情况下,加个()括号区分,是很好的。
回复

使用道具 举报

发表于 2009-11-6 01:43:04 | 显示全部楼层 IP:江苏扬州
神的意志...
回复

使用道具 举报

发表于 2009-11-6 01:43:06 | 显示全部楼层 IP:江苏扬州
神会编程吗?你的神,是哪个国家的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 19:23 , Processed in 0.258552 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表