这个程序很怪,怎么执行和调试,得到得结果不一样呢?谁能帮我解释一下。
#include <stdio.h>
int func(void)
{
static int counter=1;
return ++counter;
}
int main()
{
int answer;
answer=func()- func()* func();
printf("%d\n",answer);
}
在不同的编译器中answer=func()- func()* func();这个表达式中func()的执行顺序不是一样的,我在VC下执行的,
问题1:我在VC中执行,执行和调试的结果居然是不一样的。执行的时候是-10,单步调试的时候得到的结果是-170。
问题2:我用调试器到底怎么才能知道func()的执行顺序?
问题点数:10、回复次数:7Top
1 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-02 14:47:32 得分 7
#include <stdio.h>
int func(void)
{
static int counter=1;
return ++counter;
}
int main()
{
int answer;
answer=func()- func()* func(); // no confuse.... from left to right..
printf("%d\n",answer);
}
func()- func()* func()
2 3 4
Top
2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-02 14:49:28 得分 2
问题1:我在VC中执行,执行和调试的结果居然是不一样的。执行的时候是-10,单步调试的时候得到的结果是-170。
//// 我单步调试没有任何问题呀。。 用f10在外层函数。。。 f11到内层函数。。。。
Top
3 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-02 14:50:14 得分 1
int func(void)
{
static int counter=1; //notice the popouse of 'static'
return ++counter;
}Top
4 楼feny911(春韭秋菘)回复于 2006-05-02 14:55:03 得分 0
老纠缠这种问题有什么意义?
楼主的问题和 a = ++i - ++i * ++i;有什么区别?
Top
5 楼niatclock(豆豆雅)回复于 2006-05-02 18:02:36 得分 0
我在VC编译系统中执行结果也是-10,没有发现有异样结果Top
6 楼avicut()回复于 2006-05-02 22:37:19 得分 0
同意feny911意见,这种问题没有什么意义,实际编程时谁要写成这样,等着炒鱿鱼吧Top
7 楼networkhunter(土豆土豆我是地瓜)回复于 2006-05-03 00:37:57 得分 0
你们多说错了,这个问题还是有一定意义的。Top




