一件奇怪的事情
今天在看C++程序的时候,写了一个小程序,但是程序的结构很让我困惑,在两个编译系统上竟然出现了两个结果.
下午,我写了如下的小程序:
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int f(int,int);//说明被调用子函数的形式参数的求值顺序是从右向左
void main()
{
int i=3;
cout << f(i,i++) << endl;
cout << f(i,++i) << endl;
cout << f(i++,i) << endl;
cout << f(++i,i) << endl;
}
int fun(int a)
{
return a;
}
int f(int a,int b)
{
int c;
if(a>b)
c=0;
else
if(a<b)
c=1;
else
c=2;
return c;
}
但在VC6.0的运行结果是:
2
2
2
0
我很吃惊,不知道为什么第一个的结果竟然是2.安理说,被调用子函数的形式参数的值的计算应该是自右向左的,那么i++,这个表达式的结果是3,而i的值自增后为4.所以子函数的两个参数应该是(4,3)才对啊!所有应该返回0.
后来我去请教同学,同学在他的电脑C++ Builder上运行的结果是:
0
2
2
0
让我非常惊讶,为什么两个编译环境会得到两个不同的结果呢.希望知道的朋友能够给予帮助.