#include<stdio.h>
main()
{
int a=10;
printf("\n %d %d", a, a++); //11 10
a=10;
printf("\n %d %d", a++, a); //10 11
a=10;
printf("\n %d %d %d ", a, a++,++a); //12 11 12
}
运行后我得到了评论中给出的输出。据我所知,第一个输出是预期的,因为 printf 的执行从右到左,但无法理解第二个和第三个
在函数参数求值中没有什么是“从右到左”的。当计算函数参数时,计算的顺序是未指定的,并且计算单独的参数之间没有序列点。这意味着这个过程中绝对没有时间顺序。参数可以按任何顺序求值,并且求值过程可以以任何方式交织在一起。
然而,您的代码会遇到更严重的问题。所有三个调用的语句printf
产生未定义的行为(UB),因为它们要么尝试修改同一个对象(a
)两次,修改之间没有序列点(第三次调用),或者它们尝试修改对象并出于独立目的读取它(第一次和第二次调用)。因此,现在提及评估顺序还为时过早。您的代码的行为未定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)