我打印了上面这一行。但我得到的结果为65.尽管我第二次增加,但是如何递增和打印?
int i=5;
printf("%d%d",i,i++);
答案 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之前被评估。)