c - 使用级联 "else if"语句有什么缺点吗?

标签 c if-statement curly-brackets

这个问题几乎适用于所有类似 C 的“大括号”编程语言。

我说的是使用以下内容:

if(condition)
    meh();
else if(condition1)
    bleh();
else if(condition2)
    moo();
else
    foo();

在代码中使用这个习语时有什么需要注意的地方吗?我正在寻找诸如性能损失、编译器限制等内容。典型的编译器会如何处理此类内容?

我问是因为尽管它在人眼中看起来漂亮且扁平,但实际上它会被严格解析为等同于以下内容,并添加了大括号:

if(condition)
{
     meh();
}
else
{
    if(condition1)
    {
        bleh();
    }
    else
    {
        //...
    }
}

else if 并不是真正的分隔符;相反,每个 if 都将嵌套在前面的 else 中。这就像将 x+y+z+... 解析为 x+(y+(z+...))。

编译器实际上是这样对待它的,还是他们会将 else if 视为特例?如果是前者,我需要注意哪些注意事项?

(这是我在 StackOverflow 上的第一个问题。)

最佳答案

当我看到这个。就优化而言,我认为这是我的想法;

if(blah)
  //Most likely code to be run.
elseif(bleh)
  //Less likely code to be run.
elseif(blarg)
  //Even less likely to be run.
else
  //Almost never ever gets here.

根据您的评估,switch 语句可能更好。

关于c - 使用级联 "else if"语句有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711995/

相关文章:

jquery - 如何检测窗口大小,然后用 jquery switch 语句做一些事情

r - 在 R 中格式化电话号码

c# - VS2012 中 C# 的大括号样式

javascript - 写 javascript 时真的应该使用 K&R 样式吗?

无法使用 mmap/malloc/open 等在 64 位 linux 系统上创建大于 2GB 的文件

objective-c - XCode C 编译器错误预期成员名称或声明说明符后的 ';' 预期 ')'

java - 调用Java方法

c - 在 C 中使用巨大数组的质数生成器

c - 在什么情况下我们在 mmap 中将文件描述符设置为 -1?

c++ - 输出的差异取决于 for 循环中省略花括号 (c++)