Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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++_Pascal - Fatal编程技术网

C++ 还有什么问题吗?

C++ 还有什么问题吗?,c++,pascal,C++,Pascal,“绞死其他人”的问题是什么?(这个名字对吗?) >遵循C++编码标准(忘记了哪一个) 将括号(块)与控制结构一起使用。所以我不知道 通常存在此问题(最后一个(?) 除此之外,还需要了解 外文代码如果能对其有一个坚实的理解就好了 这个问题。我记得读过一本关于它的书 帕斯卡已经很多年了,但我找不到那本书。如果其他属于哪个 if (a < b) if (c < d) a = b + d; else b = a + c; if(a

“绞死其他人”的问题是什么?(这个名字对吗?)

<> >遵循C++编码标准(忘记了哪一个) 将括号(块)与控制结构一起使用。所以我不知道 通常存在此问题(最后一个(?) 除此之外,还需要了解 外文代码如果能对其有一个坚实的理解就好了 这个问题。我记得读过一本关于它的书
帕斯卡已经很多年了,但我找不到那本书。

如果
其他
属于哪个

if (a < b)
    if (c < d)
        a = b + d;
    else
        b = a + c;
if(a
(显然,您应该忽略缩进。)

这就是“绞死别人的问题”


C/C++通过一条规则来消除歧义,该规则规定,如果没有一个-
if
,你就不能有一个-
if
,而没有一个-
else
,作为一个带有一个-
else

歧义else的-
if
-body

这里有一些信息:

但经典的例子是:

if a then
  if b then
     x = 1;
  else 
     y = 1;
vs


从langauge设计的角度来看这一点

if
-
else
的标准语法:

Statement :-   .. STUFF..
          |    IfStatement

IfStatement :- IF_TOKEN '(' BoolExpression ')' Statement IfElseOpt

IfElseOpt :-   /* Empty */
          |    ELSE_TOKEN Statement
现在从解析器的角度来看:

if (cond1) Statement1
   if (cond2) Statement2
else Statement3

当您到达ELSE_标记时,解析器有两个选项,SHIFT或REDUCE。问题是选择哪一个需要解析器必须遵循的另一条规则。当给定此选项时,大多数解析器生成器默认为SHIFT

我看不出帕斯卡有什么问题

这个缩进不正确

if a then
  if b then
     x = 1;
  else
     y = 1;
从x=1后删除分号将使其正确缩进

if a then
  if b then
     x = 1;
  else
     y = 1;
这一个缩进正确

if a then
  if b then
     x = 1;
else
  y = 1;

我相信这将是“悬而未决的其他”问题。老实说,我从来都不明白这个问题。我在语言领域缺乏经验,但我使用的每一种语言都能很好地定义行为。如果相反,问题是如果(1)如果(某个条件)a=1;否则b=1;例如,在C语言中,它是一个完全不同的控制流(与您发布的流相比)。@Steven:我不是C语言程序员,所以我可能错了,但我不知道只有一个编辑器“C/C++通过使用一条规则来消除歧义,该规则规定如果没有else作为if的主体,就不能使用if。”当然可以<代码>如果(a
@Peter:我通过插入几个连字符使这句话更加容易理解。8-)我认为解释C/C++规则的一个更简单的方法是通常的:
else
总是绑定到最接近的匹配
if
。从解析器的角度来看,问题是不能仅从语言语法中的结果来解决歧义。解析器需要额外的信息,特别是说明如何解析它的规则。(我所知道的所有语言都有一个规则,称C++与最新IF绑定),除了C++通常不使用Selp Read(即LR(k))解析器。也许不是。但是概念是一样的,我不想讨论所有可能的解析模式,因为它看起来并不相关。为什么Pascal没有这个问题?它既有复合块也有非复合块。很可能,Pascal定义了一个规则来解决歧义,就像大多数语言一样,这与根本没有问题并不完全相同。这是Pascal吗?它应该是x:=1,而不是x=1。