一件奇怪的事情

来源:互联网 发布:keynote mac 下载 编辑:程序博客网 时间:2024/04/29 12:37

一件奇怪的事情

今天在看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

让我非常惊讶,为什么两个编译环境会得到两个不同的结果呢.希望知道的朋友能够给予帮助.

原创粉丝点击