挂其他问题?

Pet*_*sen 4 c++ pascal

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

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

Joe*_*Joe 10

别的暧昧.

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

但经典的例子是:

if a then
  if b then
     x = 1;
  else 
     y = 1;
Run Code Online (Sandbox Code Playgroud)

if a then
  if b then
     x = 1;
else 
  y = 1;
Run Code Online (Sandbox Code Playgroud)

  • 从解析器的角度来看,问题是你无法单独从语言的语法中解决模糊性问题.解析器需要额外的信息,特别是说明如何解决它的规则.(我所知道的所有语言都有一条规则,即其他语句与最新的if绑定.) (4认同)

Ric*_*dle 7

if也将else属于哪一种?

if (a < b)
    if (c < d)
        a = b + d;
    else
        b = a + c;
Run Code Online (Sandbox Code Playgroud)

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

这就是"悬而未决的问题".

C/C++得到由具有规定说,你不能有AN-摆脱模糊if-without-AN- else作为ifAN-的体区if-with-AN- else.

  • 我认为解释C/C++规则的一种更简单的方法是通常的:`else`总是绑定到最接近的匹配`if`. (7认同)
  • "C/C++通过制定一条规则说明你不能拥有if而不是if的主体来消除歧义." 当然可以.`if(a <b)if(c <d)a = b + d;`. (4认同)
  • @Steven:我不是C#程序员,所以我可能错了,但我不知道只有一个编辑器.;) (3认同)