C语言编程增量式和减量式算子问题

C语言编程增量式和减量式算子问题,c,C,这个程序实际上打印了c=24的值,但通过计算,我们可以说应该是 c=23,怎么可能 $void main() { int a=10,c; c= ++a + ++a; printf("%d",c); } 这里的后增量操作是在之前完成的。由于您给了它两次,如果后增量操作两次,则“a”的值变为12,并将其加起来(12+12)。因此最终值是24,您的程序有一个错误——您在没有插入序列点的情况下修改了相同的变量两次。修复错误,神秘感就会消失 要理解错误代码为什么会执行它所执行的操作,不仅需要对语言如何工

这个程序实际上打印了c=24的值,但通过计算,我们可以说应该是 c=23,怎么可能

$void main()
{
int a=10,c;
c= ++a + ++a;
printf("%d",c);
}
这里的后增量操作是在之前完成的。由于您给了它两次,如果后增量操作两次,则“a”的值变为
12
,并将其加起来
(12+12)
。因此最终值是
24

,您的程序有一个错误——您在没有插入序列点的情况下修改了相同的变量两次。修复错误,神秘感就会消失

要理解错误代码为什么会执行它所执行的操作,不仅需要对语言如何工作,而且需要对编译器如何工作有非常深入的理解。我只是建议不要编写错误代码,当您发现错误时,简单地修复它,而不是试图准确地理解它为什么以及如何崩溃


我给你的建议是停止。您得到了正确的教训——触发未定义行为的代码是不可预测的,并且常常无法完成您可能期望它完成的任务。在你成为正确使用UB语言的专家之前,这就是你需要了解的所有内容。

这段代码确实需要在生产中修复,但只要你还在问这类问题,他就不可能在生产中编写代码。把它理解为脑力锻炼并准确地理解语言特征是很好的,我不这么认为。我看到它使人们认为,他们可以期望这种代码以特定的方式运行,然后在不这样做的情况下给他们带来更多的问题。在回答这类问题之前,你必须了解很多基本规则。我很抱歉人们认为他们可以在现实生活中编写这样的代码,我100%同意你的看法。我仍然觉得一年级/二年级的同事学生,新到c的学生,弄清楚这里发生了什么是好的。只要有人仔细地向他们解释基本规则,并且可能重复几次。但肯定的是,有些人甚至不知道这段代码的行为是不可预测的,他们根本不准备去理解为什么它会在各种不同的条件下做它会做的事情。你是对的,我收回了我所说的-1,因为我不正确地试图解释未定义的行为
'++' > '+'