我不明白y --- 3陈述

时间:2020-06-04 12:13:00

标签: c statements

为什么y---3语句的行为类似于y = 3?有人可以解释吗?

#include <stdio.h>

main(){

   int x=-2, y=4, z;
   y---3;
   printf("%d",y);
}

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

此:

y---3;

解析为:

y-- - 3;

因此,该表达式递减y,采用y的先验值并从中减去3。表达式的结果(即1)被丢弃,因为它本身被用作语句。

答案 2 :(得分:2)

y---3;y = 3不同。

y--3被解析为(y--) - 3,并且相减的最终结果被丢弃。因此,保留了y--的唯一副作用,使1的先前值y减少了4

为此,y---n(其中n是任何整数)将为下一个打印语句产生相同的结果。

答案 3 :(得分:0)

如果在启用警告的情况下进行编译,则编译器会(除其他警告外)告诉您以下信息:

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

在这种情况下,更易于阅读的代码是:

    y-- - 3;

等效于:

    y - 3;
    y -= 1;

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