如何在C中的printf语句中进行增量

时间:2012-12-10 08:25:10

标签: c printf

我打印了上面这一行。但我得到的结果为65.尽管我第二次增加,但是如何递增和打印?

int i=5; 
printf("%d%d",i,i++); 

3 个答案:

答案 0 :(得分:3)

您的printf来电会产生未定义的行为。修改i(在i++中)并同时执行i的独立读取而没有插入序列点是非法的。

各种“评价指令”在这里无关紧要。所有尝试根据“评估顺序”或“之前”发生的事情以及“之后发生的事情”来解释此代码的行为绝对不正确。行为简直是未定义的。故事结局。

就C语言本身而言,此代码可以打印"Kill all humans!",使程序崩溃,格式化硬盘或只是拒绝编译。

答案 1 :(得分:1)

ANSI C99 ISO / IEC 9899:1999标准

  

6.5.2.2函数调用   函数指示符的评估顺序,实际参数和实际中的子表达式   参数未指定,但在之前有一个序列点   实际通话。

答案 2 :(得分:0)

正如您刚刚发现的那样,评估顺序未指定。编译器可以按任何顺序自由地评估参数。 (在你的情况下,i ++在i之前被评估。)