你能在C编程中有三个减号吗?这是什么意思?

时间:2012-12-14 07:05:36

标签: c++ c

  

可能重复:
  Why doesn’t a+++++b work in C?

我是从David Simon的“嵌入式软件入门”第113页得到的。

我在下面看到了这个陈述:

iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;

这条线路上真的有三个减号吗?三重减号是什么意思?

我相信这是一个C编程声明。

5 个答案:

答案 0 :(得分:92)

相当于:

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

这符合 maximal-munch 原则

答案 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.

一个小小的预告片,但写的很有趣: - )