可能是重复问题:
为什么在C语言中a+++++b不能正常工作?
我从David Simon的《嵌入式软件基础》第113页上看到了这个内容。
我看到了下面这个语句:
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
在这一行中,你真的可以有三个减号吗?三个减号代表什么意思?
我认为这是C编程语句。
可能是重复问题:
为什么在C语言中a+++++b不能正常工作?
我从David Simon的《嵌入式软件基础》第113页上看到了这个内容。
我看到了下面这个语句:
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
在这一行中,你真的可以有三个减号吗?三个减号代表什么意思?
我认为这是C编程语句。
正确答案是(如Rob所说)以下内容:
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
原因在于它是这样而不是那样
iHoursTemp = iHoursTemp + iZoneNew - (--iZoneOld);
这是一种被称为最大匹配策略的约定,它指出如果下一个词元有多个可能性,则使用(取出)具有最多字符的那个。在本例中,可能性是-
和--
,--
显然更长。
---
将被解析为两个令牌--
和-
,即iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
这也表明,如果您对优先级或解析规则不确定,请使用括号来澄清代码。
#include <stdio.h>
int main()
{
int iHoursTemp = 2, iZoneOld = 3, iZoneNew = 4;
//2+4 - 2 = 4
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
//2+(4--) -3 = 3
printf("\n :%d \n", iHoursTemp);
return 0;
}
iHoursTemp = 2 + 4 - (3 - 1);
括号起到了关键作用。 - chris当然可以,为什么不呢。
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
等同于
iHoursTemp = iHoursTemp + iZoneNew -(--iZoneOld); //first decrement iZoneOld then perform rest of the arithmetic operation.
一个小脑筋急转弯,但很有趣写的 :-)
iZoneNew --+--iZoneOld
可以编译并且会按预期工作。然而iZoneNew -----iZoneOld
将无法编译,因为编译器会将其解释为((iZoneNew--)--) - iZoneOld
。 - Leo