我不理解y --- 3陈述

问题描述 投票:2回答:4

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

#include <stdio.h>

main(){

   int x=-2, y=4, z;
   y---3;
   printf("%d",y);
}
c statements
4个回答
8
投票

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

由于没有在任何地方存储结果,所以唯一相关的位是y--,它将y4减少到3


3
投票

此:

y---3;

解析为:

y-- - 3;

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


2
投票

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

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

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


0
投票

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

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

在这种情况下,更可读的代码是:

    y-- - 3;

相当于:

    y - 3;
    y -= 1;

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

© www.soinside.com 2019 - 2024. All rights reserved.