【发布时间】:2014-09-27 23:09:20
【问题描述】:
我没有深入探讨这个想法,但我想知道语句是否可以用跳转表代替。
如果我们有一组类似的 if
if(x = 0)
{
...
}
if(x = 1)
{
...
}
if(x = 2)
{
...
}
如果我们有一个包含每个例程指针的表,我们可以直接跳转到与 x 的值相关的例程。
在用户输入等其他情况下,假设我们从标准输入读取一个字符,我们 会喜欢
if(c = 'a')
{
...
}
if(c = 'b')
{
...
}
我们还可以找到一种方法来根据 c 的值索引跳转表
我的问题是,在哪些情况下完全不可能用跳转表替换 if?可以在没有 if 语句(或等效语句)的情况下执行计算
【问题讨论】:
-
“不可替代”?微不足道,是的。考虑
if (f > PI)甚至if (l > LONG_MAX - 1),它们都不能(实际上)用固定查找表来表示。跳转表仅适用于相对较小的有限固定集。 -
在 C 中使用
==而不是=。