c++ 中的控制流语法

发布于 2024-09-12 22:23:41 字数 485 浏览 5 评论 0原文

使用以下 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

自此以后,行同陌路 2024-09-19 22:23:41
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();
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();
街角迷惘 2024-09-19 22:23:41

每个else 始终引用最里面的if 可能的内容。

所以

if (a)
if (b) B;
else C;

相当于

if (a) {
  if (b) B;
  else C;
}

Each else always refers to the inner-most if possible.

So

if (a)
if (b) B;
else C;

is equivalent to

if (a) {
  if (b) B;
  else C;
}
蔚蓝源自深海 2024-09-19 22:23:41

DeadMG 是对的。如果您有兴趣,规则是

else 附加到最后一个空闲的
(也就是说,没有大括号的保护和
没有相应的 else) if.

DeadMG is right. Just in case you are interested, the rule is

else is attached to the last free
(that is, unprotected by braces and
without corresponding else) if.

静若繁花 2024-09-19 22:23:41

永远不要在生产环境中编写这样的代码。它会咬你。

Don't ever write code like this in a production environment. It will bite you.

对不⑦ 2024-09-19 22:23:41

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.

jJeQQOZ5 2024-09-19 22:23:41

这称为“悬挂其他”问题。解决此问题的惯例是将“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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文