为什么y---3
语句的行为类似于y = 3
?有人可以解释吗?
#include <stdio.h>
main(){
int x=-2, y=4, z;
y---3;
printf("%d",y);
}
答案 0 :(得分:8)
C尝试贪婪地读取其令牌,即它尝试读取并匹配尽可能长的序列。因此,---
将被解析为-- -
,这意味着您拥有y-- - 3
。
由于您不在任何地方存储结果,因此唯一相关的位是y--
,它将y
从4
减少到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;
这些语句中的第一条是多余的,因为您正在计算一个值,然后将其丢弃。