[語法] 無規則性固定數值輸入的處理方式?

看板C_and_CPP作者時間15年前 (2010/05/15 00:47), 編輯推噓4(4015)
留言19則, 9人參與, 最新討論串1/7 (看更多)
 這是最近作夢夢到的..我工作上寫了一段 code ,主管看了之  後,要求要做更改,但我覺得更改後的可讀性與效能並不會比  較好,如果換做大家的話不知道會覺得怎樣寫比較好?  [問題] 使用者輸入一個數字,數字是沒有規則性的固定數字(共十個  數字,彼此無相依性,所以沒辦法簡化),要經過邏輯判斷後  ,呼叫一個固定的 func ,傳入相對應的數值(此數值有規則  性,由0x01->0x10),以取得結果。 [我寫的程式碼] void main(void) { ... func(x); ... } void func1(int x) { if(x==1) func2(0x01); else if(x==6) func2(0x02); else if(x==9) func2(0x03); ...共10個 if 判斷 } [主管的要求] void func1(int x) { switch(case) { case 1: func2(0x01); break; case 6: ... } } 或是使用 array 存放數據,再跑迴圈做判斷。  我的想法是,用 switch 的方式並不見得比使用 if,else 來  得好,可讀性是差不多,但程式碼行數會多不少,要是整個  程式裡遇到不少類似的狀況,都用 switch 的方式的話,程式  碼就會變得"很大". 而改用迴圈的方式,因為輸入數值只有十種,所以用迴圈的方  式,並無法簡化程式碼,行數也差不多。而且因為多了迴圈與  array 的使用,執行效能與記憶體空間使用上反而變差了(我  們寫的是系統程式,效能上必須要做考量),可讀性也降低了  些.. 因為是工作,所以主管要求什麼我就只好照辦,但心裡還是有  些..,不知道換做是板友的話,會怎麼撰寫這段 code 呢?  喔~對了~要是我的想法有錯的話,也請板友多多指教,感謝  ~^____^ -- 然後..這一切都是夢..:P -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.216.6

05/15 09:19, , 1F
C的話,switch有時會忘了加break;
05/15 09:19, 1F

05/15 09:20, , 2F
我會用switch,你確定你用if/else的方式寫出來的程式碼會比
05/15 09:20, 2F

05/15 09:20, , 3F
可讀性我自己認為switch比較好
05/15 09:20, 3F

05/15 09:21, , 4F
用switch的方式來的少?,你的信心是從哪裡來的?
05/15 09:21, 4F

05/15 09:24, , 5F
... 這個解法很多歐~ 基本上就是 key,value的mapping
05/15 09:24, 5F

05/15 09:25, , 6F
我之前是純C,so qsort+bsearch解決,C++可用map.
05/15 09:25, 6F

05/15 09:43, , 7F
switch+1, 另外, 數值mapping很單純的話, 寫個mapping
05/15 09:43, 7F

05/15 09:43, , 8F
table的array直接查表, 有機會連判斷都不用XD
05/15 09:43, 8F

05/15 09:44, , 9F
另外, 印象中以前看到這樣的條件判斷模式, switch會比
05/15 09:44, 9F

05/15 09:44, , 10F
較有效率, 不曉得是否記錯, 或有說明資料的@@"
05/15 09:44, 10F

05/15 13:13, , 11F
是tinlans說的。compiler有很多最佳化方法來處理switch
05/15 13:13, 11F

05/15 13:14, , 12F
但是if...else if...就只能從頭走到第k個if而已
05/15 13:14, 12F

05/15 13:20, , 13F
他新手啦,以為.c檔的行數跟編譯出來的大小正相關。
05/15 13:20, 13F

05/15 18:31, , 14F
我也覺得switch的可讀性比較好
05/15 18:31, 14F

05/16 18:19, , 15F
程式碼的行數有很重要嗎... 出來的機械碼跑得快不快
05/16 18:19, 15F

05/16 18:20, , 16F
size有沒有合乎需求才是重點吧..
05/16 18:20, 16F

05/17 20:38, , 17F
弄個static func ptr table 直接叫用(*tbl[x])(param)好了
05/17 20:38, 17F

05/17 20:39, , 18F
不過從你的要求 單存只是key/value的對應
05/17 20:39, 18F

05/17 20:39, , 19F
^純
05/17 20:39, 19F
文章代碼(AID): #1BxUyKs7 (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 7 篇):
文章代碼(AID): #1BxUyKs7 (C_and_CPP)