BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #42581同步于 2010/8/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

Unix下C++的很奇怪问题,急于求教!!

samparly
2010/8/21镜像同步6 回复
我在Unix下做C++程序时遇到了一个奇怪的问题,以前未曾注意过,不知原因,现求教!!!! 我的系统是Debian testing版,编译器为KDevelop。 为了简化问题,我调试了如下测试程序,依然出现问题: /////包含所需头文件略掉 //int i=0;//全局变量 void test(int a, int b)//输出a,b {cout<<a<<" "<<b<<endl;} int main() { int i=0;//局部变量 test(i++,--i); return 1; } 就是以上如此简单的测试程序,当变量i在main函数中声明为局部变量和在main外面声明为全局变量结果不同: 当声明为外部的全局变量时,输出a,b为-1,-1 这是我认为正常的结果; 而声明为局部变量时,输出a,b为-1,0。我就觉得很奇怪了,按照参数传递两个值应该一样才对阿? 我又测试了系统的压栈顺序,与windows相同,都是从右向左压栈,也就是先压入参数b。 亟待高手解答!!!
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
wildpointer机器人#1 · 2010/8/21
参数的求值顺序未定义。 【 在 samparly (samy) 的大作中提到: 】 : 我在Unix下做C++程序时遇到了一个奇怪的问题,以前未曾注意过,不知原因,现求教!!!! : 我的系统是Debian testing版,编译器为KDevelop。 : 为了简化问题,我调试了如下测试程序,依然出现问题: : ...................
zwp机器人#2 · 2010/8/21
BD。
wildpointer机器人#3 · 2010/8/21
C++标准 ISO/IEC 14882:2003(E) 5.2.2 第八条: The order of evaluation of arguments is unspecified. All side effects of a rgument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified. C语言也一样,函数的参数的求值顺序没定义。 不知道你用的什么编译器,加上-Wall,应该会提示你的。 【 在 samparly (samy) 的大作中提到: 】 : 我在Unix下做C++程序时遇到了一个奇怪的问题,以前未曾注意过,不知原因,现求教!!!! : 我的系统是Debian testing版,编译器为KDevelop。 : 为了简化问题,我调试了如下测试程序,依然出现问题: : ...................
samparly机器人#4 · 2010/8/21
【 在 wildpointer 的大作中提到: 】 : 参数的求值顺序未定义。 : 【 在 samparly (samy) 的大作中提到: 】 : : 我在Unix下做C++程序时遇到了一个奇怪的问题,以前未曾注意过,不知原因,现求教!!!! : ................... 不好意思阿,还很菜,不太明白你说得意思,能具体解释一下吗?谢了
zwp机器人#5 · 2010/8/21
【 在 samparly 的大作中提到: 】 : 不好意思阿,还很菜,不太明白你说得意思,能具体解释一下吗?谢了 i++,--i的计算顺序根据编译器的不同而不同。 这种问题就不要深究了,不要写这样的代码就行了。
wildpointer机器人#6 · 2010/8/21
只有编译器知道i++和--i的求值顺序。 别这么用了。别去深究,深究这种东西很无聊。 【 在 samparly (samy) 的大作中提到: 】 : 不好意思阿,还很菜,不太明白你说得意思,能具体解释一下吗?谢了