看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《awashharp (AwA)》之銘言: : 最近在寫一些網路server相關的程式, : 為了要產生足夠詳盡的錯誤訊息給使用者,常常會發現用了很深的nest-if程式… : 像是: : if(data != NULL) { : if(checkData(data) == 0) { : if(modifyData(data) == 0) { : if(fireDataChanged(data) == 0) { : if(saveDataIntoFile(data) == 0) { : printf("Finally succeed..."); : } : else printf("Data storage failed."); : } : else printf("Observer call failed."); : } : else printf("Data modification failed."); : } : else printf("Data is invaild."); : } : else printf("Data not found."); 下文43. 其實如果你的問題只是 應該如何撰寫or排列這些condition. 語意不變的對應寫法 就是 "衛句" if( NULL==data ){ print("data not found"); return; } if( checkData(data) == 0 ){ printf("Data is invaild."); return; } /* ... go on ... */ finally, 你可以得到 正確的通過所有測試的input argument. 這樣的寫法 簡潔易讀 擴充性不佳 but... 在這個例子 本來例外狀況就不多 so 我建議用衛句 是最佳寫法 衛句的使用... 不代表一個工程師實作的能力 但是 他代表了一個工程師 對於自己的code 有沒有責任感 如果今天有個錯誤狀況出現 我是應該在我的code中攔截下來? 還是跟大部分工程師寫code一樣 把錯誤丟傳出去 看看哪個雖小工程師要去處理... (就我的經驗 用衛句攔問題 和沒有用衛句debug時間10倍起跳) -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.119.168
loveme00835:很多人還是無法接受多個 return 的程式... 12/07 00:47
james732:那就用goto+單一return吧 XDDD (亂入) 12/07 00:48
ddavid:單以原問題的例子來說很簡單,把return都改成打開某個flag 12/07 00:58
ddavid:,然後最後全通過要執行的Code就只要看那個flag就好了 12/07 00:59
ddavid:這樣就不用一堆return或goto了。只是會損失一些時間在就算 12/07 01:00
ddavid:某些stage沒通過,後面所有stage都還是會被跑過...... 12/07 01:00
purpose:不能接受多 return 的原因...也許是會讓人聯想到遞迴... 12/07 01:41
StubbornLin:推這篇 我也會這樣寫 看條件在前面先return掉 12/07 12:17
awashharp:推文flag那招很常用 最近也在想flag要怎麼用會更方便XD 12/07 15:51
awashharp:原第一篇文有提到return不能夠使用的情況的說 還是感謝 12/07 15:52
VictorTom:在夾code跑到哪邊死掉, 但不能直接attach時(不管UM/KM), 12/07 21:14
VictorTom:需要加debug message時, 小弟我也覺得多重return很煩Orz 12/07 21:14