-3

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

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

3 回答 3

3

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

各种“评估顺序”在这里无关紧要。所有基于“评估顺序”或“之前”发生的事情和“之后”发生的事情来解释此代码行为的所有尝试都是绝对错误的。行为只是未定义的。故事结局。

就 C 语言本身而言,此代码可以打印"Kill all humans!"、使程序崩溃、格式化您的硬盘驱动器或干脆拒绝编译。

于 2012-12-10T08:32:22.023 回答
1

ANSI C99 ISO/IEC 9899:1999 标准说

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

于 2012-12-10T08:29:46.367 回答
0

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

于 2012-12-10T08:28:14.827 回答