2014-09-27 33 views
-1

我沒有深入這個想法,但我想知道如果語句可以被跳轉表替換。有沒有情況下,如果陳述是不可替代的跳錶?

如果我們有像

if(x = 0) 
{ 
... 
} 
if(x = 1) 
{ 
... 
} 
if(x = 2) 
{ 
... 
} 

我們可以簡單地跳,direcly,到屬於x的值,如果我們有一個表格,表格中每個例程指針例程的組IF。

在如用戶輸入的其他情況,假設我們從stdin讀取一個字符,我們 將不得不像

if(c = 'a') 
{ 
... 
} 
if(c = 'b') 
{ 
... 
} 

我們還可以找到基於C

值的方式來索引跳轉表

我的問題是,在哪種情況下,用跳轉表替換if是完全不可能的?可以在沒有語句(或等價物)的情況下執行計算

+1

「不可替代」?普通,是的。考慮甚至'if(l> LONG_MAX - 1)'的if(f> PI)',兩者都不能用固定查找表來表示(實際上)。跳轉表僅適用於相對較小的有限固定集*。 – user2864740 2014-09-27 23:10:46

+0

在C中使用'=='而不是'='。 – BLUEPIXY 2014-09-27 23:14:18

回答

0

跳轉表僅限於檢查相等時的情況。當您需要使用不平等檢查時,它們不太合適,並且也適用於OR條件下的if陳述。

當然,你總是可以使用一個簡併跳轉表在一個單一的布爾條件,例如:

boolean condition = a > b && c < d || e != f; 
switch (condition) { 
case true: ... break; 
case false: ... break; 
} 

然而,這並沒有提供過一個簡單的條件任何優勢。

相關問題