【发布时间】:2015-02-03 23:06:27
【问题描述】:
我现在正在努力学习 C/C++ 的基础知识。我正在学习 Lynda.com 上的课程
我的问题涉及第 4 章“C/C++ 基础培训课程中的宏观注意事项”中的一系列代码。我已按照所有设置程序在 Mac 上正确设置 Xcode 和 Eclipse,在 PC 上正确设置 Eclipse。当我在 MAC 和 PC 上运行此代码时,我会得到不同的结果。只是想了解为什么会发生这种情况,以及我可以做些什么来获得相同的结果。
代码如下:
// working.c by Bill Weinman <http://bw.org/>
#include <stdio.h>
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
int increment() {
static int i = 42;
i += 5;
printf("increment returns %d\n", i);
return i;
}
int main( int argc, char ** argv ) {
int x = 50;
printf("max of %d and %d is %d\n", x, increment(), MAX(x, increment()));
printf("max of %d and %d is %d\n", x, increment(), MAX(x, increment()));
return 0;
}
在 PC 上我得到这个结果:
increment returns 47
increment returns 52
max of 50 and 52 is 50
increment returns 57
increment returns 62
increment returns 67
max of 50 and 67 is 62
在 MAC(Xcode 和 Eclipse)上我得到这个结果:
increment returns 47
increment returns 52
increment returns 57
max of 50 and 47 is 57
increment returns 62
increment returns 67
increment returns 72
max of 50 and 62 is 72
为什么会发生这种情况,我该怎么做才能确保结果相同?
【问题讨论】:
-
顺便说一句:IDE 没有任何意义,确切的编译器和您给它的选项几乎在每种情况下都会确定顺序。虽然理论上它可能会随着程序的每次执行而改变。
-
@AdrianoRepetti 几乎可以肯定是一个 dup,但因为我对这个问题有一个答案,所以我不想用锤子关闭它。