Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C语言编程中能有三个减号吗?这是什么意思?_C++_C - Fatal编程技术网

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

C++ 在C语言编程中能有三个减号吗?这是什么意思?,c++,c,C++,C,可能重复: 我是从David Simon的“嵌入式软件入门”第113页上得到的 我看到下面的陈述: iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld; 这行中真的有三个减号吗?三重减号是什么意思 我相信这是一个C编程语句。等于 ihorstemp=ihorstemp+(iZoneNew--)-iZoneOld #include <stdio.h> int main() { int iHoursTemp = 2, iZoneOld =

可能重复:

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

我看到下面的陈述:

iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
这行中真的有三个减号吗?三重减号是什么意思

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

等于

ihorstemp=ihorstemp+(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;

}
#包括
int main()
{
int iHoursTemp=2,iZoneOld=3,izoneew=4;
//2+4 - 2 = 4
iHoursTemp=iHoursTemp+izoneew--iZoneOld;
//2+(4--) -3 = 3   
printf(“\n:%d\n”,iHoursTemp);
返回0;
}
给我3个gcc

根据2.5预处理标记,第3条和6.4词汇元素,第4条,编译器将尽可能长的字符序列解析为下一个标记

这意味着
--
将被解析为两个标记
--
-
,这两个标记给出

iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
这也表明,如果您不确定优先级或解析规则,请使用括号来澄清代码。

它相当于:

iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
这符合原则,正确答案如下(正如Rob所说):

iHoursTemp = iHoursTemp + (iZoneNew--) - iZoneOld;
原因是那样的,而不是那样的

iHoursTemp = iHoursTemp + iZoneNew - (--iZoneOld);
是一种被称为最大咀嚼策略的惯例,该策略规定,如果下一个标记有多个可能性,则使用(咬合)具有最多字符的标记。这种情况下的可能性是
-
-
-
明显更长。

当然可以。 此声明

iHoursTemp = iHoursTemp + iZoneNew ---iZoneOld;
相当于

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


这是一个小小的脑筋急转弯,但写起来很有趣:-)

如果你知道如何在队友的愤怒中生存下来,你可以。@elyashiv不要过分依赖简单的测试结果。未定义的行为潜伏在每一个角落。还有一个问题值得“棘手的问题”徽章-诱使多个被否决的答案。等等,这是一本没有解释的书?哦,孩子!听起来像是另一本书。谢谢。我完全忘记了10年前如何用C语言编程。请看我的示例代码和结果。@jogojapan,这是刚刚添加的。@rjayavrp,
ihorstemp=2+4-(3-1)括号起作用。是的。对的()是游戏规则的改变者:)最后,一个完全正确的答案:)为什么会有人想像原来的句子那样编程?你不认为这样一个修改过的语句对计算机来说更好更清晰吗?iHoursTemp=iHoursTemp-iZoneOld+(izoneew-)@Joseph Lee Noone可能永远都不想做这个节目。然而,并不是计算机有问题(如果你有一个合适的编译器,它知道规则),而是人们经常无法理解这一点。老实说,我甚至不会像“可读”版本那样进行内联增量,除非性能绝对不允许使用几个语句。因为即使人们能读懂它的意思,真正理解它也是不一样的。然而,语法规则明确禁止使用“++++”。我相信,在C++标准中,“-+”和“++”也应该被赋予“没有Munh”子句。缺少它可能是一种疏忽,而不是对这种可怕的编码风格的默许。@华伦-“+++”不是“语法规则明确禁止的”。只考虑其中一种解释。是的,有。在C99即§6.4词汇元素中,第4段:“如果输入流已被解析为预处理标记(最多可达给定字符),则下一个预处理标记是可构成预处理标记的最长字符序列。”。这被非正式地称为最大munch规则,在这里的注释和其他答案中多次提到。在C++11中,它在§2.5预处理标记中,第3段:“如果输入流已被解析为预处理标记,直到给定的字符:[-原始字符串文字规则][-规则
17向下,4向上-据我统计,这意味着@OlafDietsche在这个答案上的声望上升了6。分享并享受:-)酷,没有放弃这么多的反对票,我很荣幸。我刚刚恢复了我的规则,给了你+1:)@R.MartinhoFernandes,谢谢:)为什么有人想像原来的句子那样编程?你不认为是修改过的吗这样的语句对计算机来说更好更清晰?iHoursTemp=iHoursTemp-iZoneOld+(izoneew--)@JosephLee,是的,它会更好、更容易阅读。但是这个问题引发了一场关于编译器策略的讨论。@Cthulhu,这很有趣,因为Rob是第一个提到它的人,在对一个现已删除的答案的评论中。我想不出在任何情况下,在同一表达式中混合--or++运算符与其他运算符会产生任何影响ense。我可以想到很多情况下,它会使读者感到困惑,并导致未定义或未指定的行为。因此,为了程序员自己以及人类读者的利益,修复此代码的正确方法是将izoneew移动到它自己的一行。不,这是对该语句的错误解释。