挂其他问题?

时间:2009-09-24 20:29:21

标签: c++ pascal

什么是“悬挂其他”问题? (这是正确的名字吗?)

遵循C ++编码标准(忘记哪一个)我总是 使用带有控制结构的括号(块)。所以我没有 通常有这个问题(最后(?)的“如果” 否则属于),但为了解可能的问题 外国代码,如果对它有一个坚定的理解,那就太好了 这个问题。我记得在一本书中读过这篇文章 很多年前Pascal,但我找不到那本书。

4 个答案:

答案 0 :(得分:10)

暧昧其他。

此处有一些信息:http://theory.stanford.edu/~amitp/yapps/yapps-doc/node3.html

但经典的例子是:

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

VS

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

答案 1 :(得分:8)

if属于哪个else

if (a < b)
    if (c < d)
        a = b + d;
    else
        b = a + c;

(显然你应该忽略缩进。)

这就是“悬而未决的问题”。

C / C ++通过一条规则表明你不能拥有 - if - 没有 - else作为if - 身体来摆脱歧义 - if - 与 - 一个 - else

答案 2 :(得分:2)

从语言设计的角度来看这个。

标准BNF - 类似于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_TOKEN时,解析器有两个选项,SHIFT或REDUCE。问题是选择哪个需要解析器必须遵循的另一个规则。给定此选项时,大多数解析器生成器默认为SHIFT。

答案 3 :(得分:-1)

我没有看到Pascal的问题?

这个缩进不正确。

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

从x = 1后删除分号会使其正确缩进。

这个正确缩进

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