我正在研究一箇中等大小的C文件,我需要爲3個不同的排他條件進行處理。 (如果條件1存在,則執行此操作,如果存在2則執行其他操作並且同樣)。所以,在該文件的許多地方,我需要做/如果/其他檢查 - 看起來很髒。 我有50個地方正在做這些檢查。避免很多if-else檢查
有沒有更好的方法讓代碼看起來更清潔?
我正在研究一箇中等大小的C文件,我需要爲3個不同的排他條件進行處理。 (如果條件1存在,則執行此操作,如果存在2則執行其他操作並且同樣)。所以,在該文件的許多地方,我需要做/如果/其他檢查 - 看起來很髒。 我有50個地方正在做這些檢查。避免很多if-else檢查
有沒有更好的方法讓代碼看起來更清潔?
如果條件真的獨享,那麼我會從三個獨立的功能開始,每個過程一個。將任何通用代碼分解成它們自己的函數,您可以從三個過程函數中調用它們。唯一有條件的左邊應該是你決定調用哪三個過程函數的地方。
如果我理解正確 - 你一遍又一遍地檢查相同的條件?
如果是這樣,我只會檢查一次,如果這需要重複代碼 - 將此代碼放入函數中。
幾種途徑來考慮:
一個switch
聲明可能有助於使你的代碼更易讀,如果這些條件是指(或可製成指)相同的變量。
如果受控語句很簡單(例如,分配),那麼您可能可以使#define
宏爲if ... else if ... else ...
構造。
如果案件中的公共部分相對較小,最好定義三種不同的功能。儘管如此,這可能會導致代碼重複數量適中。
如果通用零件較大,請將它們移至功能併爲每個零件定義一個單獨的功能。如果「部分」函數變得太複雜,則可以使用宏來代替,儘管這會增加生成的目標代碼的大小。然後使用這些「部分」函數或宏爲這三種情況中的每一種創建一個單獨的函數。
最後兩個途徑將條件檢查減少到一個,最小或沒有代碼重複。 PS:通過「通用部分」,我的意思是執行代碼的那些部分,而不管這三種情況中的哪一種實際上是活動的。
主要有兩個選擇,他們都依賴於你的問題解決了代碼
1)如果你的條件是整個C代碼文件相同,這意味着病情沒有變化,但代碼必須表現在幾個地方有所不同。
即
/* prepare */
if(cond == 1){
/*prepare 1 */
}elseif(cond == 2){
/*prepare 2 */
}
/* run */
if(cond == 1){
/*run 1 */
}elseif(cond == 2){
/* run 2 */
}
在這種情況下,你應該只重構的東西是一個單一條件。即
/* process and run */
if(cond == 1){
/* process 1 */
/* run 1 */
}elseif(cond == 2){
/* process 2 */
/* run 2 */
}
如果你在整個代碼中有變化的條件。即
cond = DEFAULT_COND /* = 1 */;
/* prepare */
if(cond == 1){
cond = prepare_1();
}elseif(cond == 2){
cond = prepare_2();
}
/* run */
if(cond == 1){
/* run 1 */
}elseif(cond == 2){
/* run 2 */
}
在這種情況下,你的代碼是太複雜,簡單地重構
因爲在「運行」代碼進行評估可能已被「處理」的代碼改變,在這種情況下,但只有一次COND變量在這樣的情況下。你會無法將代碼重構爲單一條件。
你能舉一個你的代碼目前的樣子嗎? – 2011-01-13 20:59:48
看起來你需要上課,但就C而言,不可能達到目標? – dzendras 2011-01-13 21:02:24