注册 登录
编程论坛 C++教室

关于"++"的问题

terisevend 发布于 2007-06-02 16:19, 918 次点击
先来看下面一段简单代码:

#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会把所有没有输出指令的程序视为含有恶意代码的程序处理- -!


15 回复
#2
aipb20072007-06-02 21:30
这个问题以前看到过。

我的理解是,这是种不好的书写方法,避免这样用就行了。
相当于给编译器找麻烦。
#3
tancui2007-06-02 21:56

怎么回事啊,不论怎么算也不会那样啊,奇怪

#4
神vLinux飘飘2007-06-02 22:08
[CODE]其实说难也不难理解为什么是7
我们看看代码就知道了

movl $0, -12(%ebp) // s=0
movl $0, -8(%ebp) // p=0
addl $1, -12(%ebp) //s=1
addl $1, -12(%ebp) //s=2
movl -12(%ebp), %eax //%eax=2
addl -12(%ebp), %eax //%eax=4
addl $1, -12(%ebp) //s=3
addl -12(%ebp), %eax //%eax=7
movl %eax, -8(%ebp) //p=%eax
[/CODE]
#5
神vLinux飘飘2007-06-02 22:22
汇编....
#6
aipb20072007-06-02 22:24

呵呵!

#7
terisevend2007-06-02 23:25
汇编看不懂....
#8
谁与争疯2007-06-02 23:32
在自己知道的情况下,加个()括号区分,是很好的。
#9
神vLinux飘飘2007-06-02 23:35
神的意志...
#10
谁与争疯2007-06-02 23:37
神会编程吗?你的神,是哪个国家的?
#11
神vLinux飘飘2007-06-02 23:42
人生就是一堆混乱的代码,一切看似皆有可能,然而却都早已命中注定。
所以说神会编程,而且擅长写混乱代码~
#12
谁与争疯2007-06-02 23:48
炮神。
#13
herbert_19872007-06-03 01:23
movl $0, -12(%ebp) // s=0
movl $0, -8(%ebp) // p=0
addl $1, -12(%ebp) //s=1
addl $1, -12(%ebp) //s=2
movl -12(%ebp), %eax //%eax=2
addl -12(%ebp), %eax //%eax=4
addl $1, -12(%ebp) //s=3
addl -12(%ebp), %eax //%eax=7
movl %eax, -8(%ebp) //p=%eax

请问:
$是什么意思?
%是什么意思?
movl $0, -12(%ebp) 究竟是怎样运算的?
#14
神vLinux飘飘2007-06-03 08:20
这是AT&amp;T的语法,如果你不想在LINUX下写汇编,大可不必和我讨论这段代码。
#15
herbert_19872007-06-03 09:41
哦,跟LINUX有关的,我一概不懂。
1