推 shadown:u大說對了,確實是某個 head file 裡的定義..^^|| 05/15 16:51
我比較好奇的是x這個數字是那來的,但我想是沒有重複的數字。
該不會是某個head file定義了
enum {status1 ,status2 ,status3 ,status4};
enum Status
{
STATUS1 = 0x01<<status1, //1
STATUS2 = 0x01<<status2, //2
STATUS3 = 0x01<<status3, //4
STATUS4 = 0x01<<status4, //8
STATUS_A = STATUS2 | STATUS3, //6
STATUS_B = STATUS1 | STATUS4 //9
};
如果是這樣,func(int x)可用func(Status stat)
if ...... else if
則改成
switch(stat) {
case STATUS1 :
case STATUS2 :
......;
case STATUS3 :
......; break;
case STATUS_A: ......; break;
case STATUS_B: ......; break;
:
}
這樣變化性及可讀性是不是比較高,
以上是我憑空亂想的 @_@
※ 引述《shadown ()》之銘言:
: 這是最近作夢夢到的..我工作上寫了一段 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 呢?
: 喔~對了~要是我的想法有錯的話,也請板友多多指教,感謝
: ~^____^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.80.157.209
※ 編輯: unfun 來自: 115.80.157.209 (05/15 14:34)