我是从David Simon的“嵌入式软件入门”第113页得到的。
我在下面看到了这个陈述:
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
这条线路上真的有三个减号吗?三重减号是什么意思?
我相信这是一个C编程声明。
答案 0 :(得分:92)
答案 1 :(得分:49)
正确答案是(如Rob所说)以下内容:
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
原因是这样而不是
iHoursTemp = iHoursTemp + iZoneNew - (--iZoneOld);
是一种称为最大咀嚼策略的约定,它表示如果下一个令牌有多种可能性,请使用(咬合)具有最多字符的那个。在这种情况下的可能性是-
和--
,--
显然更长。
答案 2 :(得分:12)
根据Draft C++11 (PDF) 2.5预处理令牌,第3节和Draft C11 (PDF) 6.4词汇元素,第4节,编译器将最长可能的字符序列解析为下一个标记。
这意味着---
将被解析为两个令牌--
和-
,这将提供
iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
这也表明,如果您不确定优先级或解析规则,请使用括号来阐明代码。
答案 3 :(得分:5)
等于
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。
答案 4 :(得分:-8)
当然可以。 这句话
iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
相当于
iHoursTemp = iHoursTemp + iZoneNew -(--iZoneOld); //first decrement iZoneOld then perform rest of the arithmetic operation.
一个小小的预告片,但写的很有趣: - )