C语言 我不明白 y---3 语句



为什么y---3语句的行为像y = 3?有人可以解释一下吗?

#include <stdio.h>
main(){
int x=-2, y=4, z;
y---3;
printf("%d",y);
}

C 试图贪婪地读取其标记,即它试图读取和匹配尽可能长的序列。因此,---将被解析为-- -,这意味着您有y-- - 3

由于您不将结果存储在任何地方,因此唯一相关的位是y--,这会将y4降低到3

这个:

y---3;

解析为:

y-- - 3;

所以这个表达式递减y,取y的先验值并从中减去 3。 表达式的结果(即 1(被丢弃,因为它本身用作语句。

y---3;

y = 3不同。

y--3被解析为(y--) - 3,减法的最终结果被丢弃。因此,保留了y--的唯一副作用,从4的早期值y1减少。

就此而言,y---n,其中n是任何整数,将为下一个 print 语句生成相同的结果。

如果您在启用警告的情况下编译它,编译器会告诉您(以及其他警告(如下内容:

test.c:6:7: warning: value computed is not used [-Wunused-value]
y---3;
~~~^~

在这种情况下,编写得更具可读性的代码是:

y-- - 3;

相当于:

y - 3;
y -= 1;

这些语句中的第一个是多余的,因为您正在计算一个值,然后丢弃它。

最新更新