【发布时间】:2013-06-08 08:34:00
【问题描述】:
据我了解,c/c++ 中的 switch 语句有时会编译为跳转表。 我的问题是,是否有任何经验法则可以确保这一点?
就我而言,我正在做这样的事情:
enum myenum{
MY_CASE0= 0,
MY_CASE0= 1,
.
.
.
};
switch(foo)
{
case MY_CASE0:
//do stuff
break;
case MY_CASE1:
//do stuff
break;
.
.
.
}
我按顺序涵盖了从 1 到 n 的所有情况。可以安全地假设它将编译为跳转表吗?
原始代码是一个又长又乱的if else 语句,所以至少我获得了一些可读性。
【问题讨论】:
-
1) 这很可能取决于您的编译器。你用的是哪个? 2)你为什么关心?您应该相信您的编译器会尽其所能使用您编写的代码。跳表可能不是所有情况下的最佳选择。不能完全回答您的问题,但您可能对ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf 感兴趣
-
@BoBTFish:感谢指点,感谢。
-
@BoBTFish 谢谢,如果我有时间的话,这似乎是一本不错的读物(:
-
你为什么在乎?编译器编写者可能比您更了解目标硬件,并且编译器通常会生成尽可能好的代码,无论是跳转表、链式测试还是其他任何东西。
-
为什么?跳转表很容易编写。如果你想写一个。 switch/case 很清楚,对于少数情况,它只是几个 cmp/jmp 指令。一般来说,相信你的编译器。
标签: c++ switch-statement jump-table