以下代碼是我正在閱讀的解釋器的一部分。我試圖找出爲什麼使用這個而不是簡單的c >= '0' && c <= '9'
?選擇很多情況,而不是c> ='0'&& c <='9'到0-9數字檢查
switch(ch) {
//...
case '0': case '1': case '2':
case '3': case '4': case '5':
case '6': case '7': case '8':
case '9':
//etc
break;
//more cases
}
我也很好奇爲什麼選擇使用開關。它是如何作爲解釋器的代碼的,我相信作者有背景C知道。這是最快的比c >= '0' && c <= '9'
條件還是這種方式讓編譯器做一些優化?它是使用gcc編譯的
沒有看到什麼「更多的情況下」都不能回答這個問題。例如,它可能是交換機覆蓋了對該語言有意義的*整個*字符集,並且它實際上是用一個跳轉表進行N路選擇 - 這就是'switch'是真的很擅長。或者可能有人不知道他們可以安全地做'c'='0'&& c <='9''。或者還有第三件事。沒有辦法從你給我們的東西中分辨出來。 – zwol 2013-05-11 00:04:28
在記分員中使用'switch'是相當普遍的做法 - 部分原因是'switch'總是使用跳轉表來提高速度。即使是現在,'switch'也不能使用跳轉表,但只是因爲有一個更好的選項(比如硬編碼的二進制搜索)。編譯器很難發現if/elseif/else條件可以以相同的方式實現,因爲條件更加靈活,甚至可能產生副作用,儘管編譯器始終變得更加智能。 – Steve314 2013-05-11 03:15:20