在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.
一个小脑筋急转弯,但有趣的写:-)