请问哪里未定义?
请问哪里未定义?
追答在两个顺序点之间多次修改同一个对象的值,或者同时访问并修改同一个对象的值,属于未定义行为。如果你不明白未定义行为是什么,先百度了解。
追问请问你用手打出代码试过吗,而不是经过大脑就说代码错误。还有你凭什么认定是同时访问并修改同一个对象,要知道++也是一种运算符,而这里面也有运算优先级之分。我想要的答案其实是后面的为什么输出结果是那样,你懂吗?完整代码给你贴上:
#include
int main() {
int a = 1;
printf("%d %d %d\n",a,a++,++a);
return 0;
}
我不想和你争论,请你自己阅读C99标准,先了解顺序点、副作用两个概念分别是什么意思。
还有,有结果不代表这种语句就正确、可移植。
字数超限,放图
顺便看看那两个回答
你看,所以你连我在说什么都不知道,说明你没到这个境界。我让你去了解顺序点和副作用是有意义的,因为它们直接告诉你为什么这样的语句是没有标准计算过程的,怎么算都对,怎么算又都不对。你跟我扯什么数据结构编译原理,那都是完全偏离主题,不能从根本上解答这个问题。你找的那几个回答都是完全错误的,什么"printf在编译的时候表达式是从左往右计算"这种句子根本是不知所云,C语言标准根本没有规定函数参数的求值顺序。
初学者就要虚心一点,不要吊儿郎当一副我什么都懂的样子,我在这里回答问题是有底气的,我要是一知半解根本就不会出现在这个问题下面。