[討論] C/C++ 如何處理 unchecked return value?

看板Programming作者時間12年前 (2013/08/04 13:38), 編輯推噓1(1015)
留言16則, 5人參與, 最新討論串1/1
大家好 在這邊想討論一些 coding style 原PO目前負責的程式碼,散佈一些沒有確認回傳值的函式呼叫 e.g. fseek(ooxx) ---------------------------------------- 聽到的說法是: 因為總是可以保證 fseek 回傳 0 所以這邊沒有做錯誤處理 或許也不需要做錯誤處理,因為一旦發生 return != 0 讓程式正常掛掉即可 ----------------------------------------- 近日公司採用 Coverity 去做 static code checking 這類型的函式呼叫被回報為 unchecked return value,必須處理 我的想法是 既然總是保證return = 0 那就使用 assertion 做確認 int seekSuccess = fseek(ooxx); assert(seekSuccess == 0); ---------------------------------------- 這時,另一個問題就發生了 公司 Build 時使用 compiler 最佳化 -O2 assert 全部被編譯器skip 此時編譯器回報 seekSuccess <- unused variable 編譯失敗 ----------------------------------------- 請問這類型的問題有比較好的寫法嗎? 先謝謝各位大大 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.68.205

08/04 16:10, , 1F
如果編譯選項可以調整的話 拿掉 -DNDEBUG
08/04 16:10, 1F

08/04 16:10, , 2F
就能保留 assert
08/04 16:10, 2F

08/05 00:12, , 3F
樓上你好 compiler flag是公司決定
08/05 00:12, 3F

08/05 00:12, , 4F
小弟無法干涉...><
08/05 00:12, 4F

08/05 00:43, , 5F
我也想了解
08/05 00:43, 5F

08/05 02:00, , 6F
那就自己定義一個assert:輸出必要資訊後abo
08/05 02:00, 6F

08/05 02:01, , 7F
abort()
08/05 02:01, 7F

08/05 08:39, , 8F
加void就好啦 (void)feek() 這樣
08/05 08:39, 8F

08/05 10:04, , 9F
這樣不會 abort 喔
08/05 10:04, 9F

08/05 14:10, , 10F
一開始就只是為了避coverity而已啊
08/05 14:10, 10F

08/22 12:08, , 11F
其實Coverity這個flag沒啥意義 建議拿掉
08/22 12:08, 11F

08/22 12:09, , 12F
很多函數傳回來的值(比方說write()回傳
08/22 12:09, 12F

08/22 12:10, , 13F
的是寫入的size)並沒有什麼理由特別去
08/22 12:10, 13F

08/22 12:10, , 14F
處理,這flag常常顯得沒太大意義
08/22 12:10, 14F

08/22 12:11, , 15F
至於有exception(當然 C++用這個有點爭
08/22 12:11, 15F

08/22 12:11, , 16F
義就是)的話那這個就更沒意義了....
08/22 12:11, 16F
文章代碼(AID): #1H_UZTiX (Programming)
文章代碼(AID): #1H_UZTiX (Programming)