重新打开 请投票重新打开。这个问题不同于下面标出的问题。 注意这个问题()括号也被使用。所以使用()括号应该有一个明确的行为。
这是2个程序
计划1
#include<stdio.h>
int main()
{
int b=5;
int c= (b++)+(++b);
printf("%d",c);
}
输出
12
计划2
#include<stdio.h>
int main()
{
int b=5;
int c= (b++) + (++b) + (++b) + (++b);
printf("%d",c);
}
输出
27
我从here获取了程序2,链接上的逻辑似乎是正确的 因为对于相同的逻辑,程序1的输出是12。 这似乎是正确的。
但是对于program2输出中的相同解释是27而不是29。 那么为什么会出现这种差异,这是我想要理解的。 在该链接上给出的解释有什么问题?
答案 0 :(得分:6)
在一个表达式中不止一次增加的是Undefined Behavior™,这意味着任何事情都可能发生,包括你的编译器作家绕过你的房子并用棒球棒砸你的头部并且程序的输出是一张图片你的大脑。写下你链接到的内容的人不知道他们在谈论什么,这是错的。
答案 1 :(得分:3)
此处没有运算符优先级问题。由于b
上的各种操作之间缺少了序列点,因此存在未定义的行为。