在C编程中你可以有三重减号吗? 这是什么意思?

可能重复:
为什么不用+++++ b在C中工作?

我从David Simon的“embedded式软件入门”第113页得到了这个结论。

我在下面看到这个声明:

iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld; 

你能在这一行真的有三个减号吗? 三减号是什么意思?

我相信这是一个C编程语句。

这相当于:

 iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld; 

这是按照最大的蒙克原则

正确的答案是(正如罗布所说)如下:

 iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld; 

原因是这样,而不是

 iHoursTemp = iHoursTemp + iZoneNew - (--iZoneOld); 

是一种被称为最大蒙克策略的惯例,即如果下一个令牌有多种可能性,则使用(咬)具有最多字符的那个。 在这种情况下的可能性是-----显然更长。

根据草案C ++ 11(PDF) 2.5预处理令牌,第3节和草案C11(PDF) 6.4词汇元素,第4节,编译器将最长可能的字符序列parsing为下一个标记。

这意味着---将被parsing成两个令牌--- ,这给出

 iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld; 

这也表明,如果您不确定优先级或parsing规则,请使用括号来澄清代码。

等于

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; } 

给我3 gcc。

当然,为什么不。 这个说法

 iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld; 

相当于

 iHoursTemp = iHoursTemp + iZoneNew -(--iZoneOld); //first decrement iZoneOld then perform rest of the arithmetic operation. 

一个小脑筋急转弯,但有趣的写:-)