2013-04-16 102 views
1

我写了一个简单的程序,其中int a = 10,我期待的O/P为10 9 9增量和变量的递减printf中

printf("a++:%d \t a:%d \t --a: %d \n", a++, a, --a); 

但O/P即得是9 10 10

我写像printf(" a:%d \t --a: %d \n", a, --a);

的O/p其中我得到另一个printf的是9 9

可以一尼永向我解释这个吗?

+0

你确定你在第一个printf中得到9 10 10吗? –

+0

其他可能的重复: http://stackoverflow.com/questions/376278/parameter-evaluation-order-before-a-function-calling-in-c http://stackoverflow.com/questions/15027347/ c函数参数评估和传递 http://stackoverflow.com/questions/9566187/function-parameter-evaluation-order – aib

+0

“任何人都可以解释我这件事吗?” - 如果你想知道编译器做了什么,那产生了那个结果,然后反汇编可执行文件,或者告诉你的编译器输出程序集。但从相当重要的意义上说,这并不重要。你的代码每个标准都有未定义的行为,所以编译器“合法”可以做任何事情。它也可能因编译器,版本和优化选项而异。 –

回答

3

您遇到未定义的行为,由于有多个表达式带有副作用,没有sequence points inbetween

无法保证函数参数被评估的顺序,所以在这里没有办法“期待”某些东西(除非编写了编译器)。

+0

我写这个printf作为两个单独的实例 – Manu

+0

@Manu对不起,我不明白你的评论。 – unwind