Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释C程序的输出 #包括 main() { int i=5; printf(“%d%d”,i,i++); }_C_Int_Printf_Output_Post Increment - Fatal编程技术网

解释C程序的输出 #包括 main() { int i=5; printf(“%d%d”,i,i++); }

解释C程序的输出 #包括 main() { int i=5; printf(“%d%d”,i,i++); },c,int,printf,output,post-increment,C,Int,Printf,Output,Post Increment,输出: 6.5 有人能解释一下这种输出吗? 是否与逗号运算符的关联性有关?该行为未指定。这是因为printf的参数没有排序 (非正式地说,您不知道i何时递增)。内部参数的求值顺序未指定,因此根据您的C编译器和选项i或i++可以先求值。您收到的输出是当i++在i之前得到评估时发生的情况,这只能由使用的特定目标处理器和编译器(&ABI)来解释。不要依赖它。在你看之前问这个问题:这段代码中没有逗号运算符。逗号是函数参数之间的分隔符。您可以通过引用引用;);-)来详细说明答案我认为只需要用斜体字包含支持

输出: 6.5

有人能解释一下这种输出吗? 是否与逗号运算符的关联性有关?

该行为未指定。这是因为
printf
的参数没有排序


(非正式地说,您不知道
i
何时递增)。

内部参数的求值顺序未指定,因此根据您的C编译器和选项
i
i++
可以先求值。您收到的输出是当
i++
i

之前得到评估时发生的情况,这只能由使用的特定目标处理器和编译器(&ABI)来解释。不要依赖它。在你看之前问这个问题:这段代码中没有逗号运算符。逗号是函数参数之间的分隔符。您可以通过引用引用;);-)来详细说明答案我认为只需要用斜体字包含支持性术语。希望这将刺激OP进行进一步的调查。参数的计算顺序是未指定的,而不是未定义的。经典的未定义行为是增加两个参数(如声明的副本),但这在这里不适用。@NigelHarper:你是对的。我修正了。希望这个答案对OP有所帮助。否则程序可能会崩溃,或者删除你的所有文件。因为这是未定义的行为。像你这样的评论可能会使程序员依赖于特定于编译器的行为而编写糟糕的程序。@只是另外一个奇怪的,呃,在一个函数中有多个参数会使程序崩溃或删除文件?抱歉,在任何C编译器中都没有。在代码中有这样的结构会导致未定义的行为。未定义意味着您无法预测会发生什么。这意味着程序可能会崩溃。您不知道任何c编译器在这种情况下会崩溃,这并不意味着这样的编译器不可能存在。@另一个奇怪的是,这根本不是真的,请参阅规范。在C语言中,有不止一个参数是很好的。参数的求值顺序没有指定,但这离“你的程序可能会崩溃并烧毁你的房子”的内容还有很长的距离。停止在这里传播虚假的智慧。
#include <stdio.h>

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