返回信息流我在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。
亟待高手解答!!!
这是一条镜像帖。来源:北邮人论坛 / cpp / #42581同步于 2010/8/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Unix下C++的很奇怪问题,急于求教!!
samparly
2010/8/21镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
参数的求值顺序未定义。
【 在 samparly (samy) 的大作中提到: 】
: 我在Unix下做C++程序时遇到了一个奇怪的问题,以前未曾注意过,不知原因,现求教!!!!
: 我的系统是Debian testing版,编译器为KDevelop。
: 为了简化问题,我调试了如下测试程序,依然出现问题:
: ...................
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。
: 为了简化问题,我调试了如下测试程序,依然出现问题:
: ...................
【 在 wildpointer 的大作中提到: 】
: 参数的求值顺序未定义。
: 【 在 samparly (samy) 的大作中提到: 】
: : 我在Unix下做C++程序时遇到了一个奇怪的问题,以前未曾注意过,不知原因,现求教!!!!
: ...................
不好意思阿,还很菜,不太明白你说得意思,能具体解释一下吗?谢了
【 在 samparly 的大作中提到: 】
: 不好意思阿,还很菜,不太明白你说得意思,能具体解释一下吗?谢了
i++,--i的计算顺序根据编译器的不同而不同。
这种问题就不要深究了,不要写这样的代码就行了。
只有编译器知道i++和--i的求值顺序。
别这么用了。别去深究,深究这种东西很无聊。
【 在 samparly (samy) 的大作中提到: 】
: 不好意思阿,还很菜,不太明白你说得意思,能具体解释一下吗?谢了