c++ 中的控制流语法
使用以下 C++ 示例(有意省略缩进)。
if(condA) // if #1
if(condB) // if #2
if(condC) // if #3
if(condD) // if #4
funcA();
else if(condD) // else #1 if #5
funcB();
else if(condE) // else #2 if #6
funcC();
else // else #3
funcD();
else if(condF) // else #4 if #7
funcE();
else // else #5
funcF();
什么else
指的是什么if
以及这方面的规则是什么? (是的,我知道使用 { }
可以解决这个问题)。
With the following c++ example(indention was left out in purpose).
if(condA) // if #1
if(condB) // if #2
if(condC) // if #3
if(condD) // if #4
funcA();
else if(condD) // else #1 if #5
funcB();
else if(condE) // else #2 if #6
funcC();
else // else #3
funcD();
else if(condF) // else #4 if #7
funcE();
else // else #5
funcF();
What else
refers to what if
and what is the rule about this? (yes I know using { }
will solve this).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
每个
else
始终引用最里面的if
可能的内容。所以
相当于
Each
else
always refers to the inner-mostif
possible.So
is equivalent to
DeadMG 是对的。如果您有兴趣,规则是
DeadMG is right. Just in case you are interested, the rule is
永远不要在生产环境中编写这样的代码。它会咬你。
Don't ever write code like this in a production environment. It will bite you.
C++ 知道哪个 else 与哪个 if 匹配,并且 C++ 编译器有很好的解析器,可以在 flash 中对此进行排序。问题是你不擅长这个。
通过 C++ Prettyprinter 运行它,结果格式化文本将变得非常清晰。
C++ knows which else matches which if, and C++ compilers have just-fine parsers that sort this out in flash. The problem is the you aren't good at this.
Run this through a C++ prettyprinter and the result formatted text will make it very clear.
这称为“悬挂其他”问题。解决此问题的惯例是将“else”附加到最近的“if”语句。
悬挂其他维基百科
This is called "Dangling else" problem. The convention to solve this is to attach the 'else' to the nearest 'if' statement.
Dangling else wikipedia