看板 C_and_CPP 關於我們 聯絡資訊
原文恕刪 1. SDK 裡面有些 API 雖傳回 void, 不代表它們一定是無誤, 不然就不需要 GetLastError() 這個東西。 2. 即使不是傳回 void,也可能隱含了該函式調用失敗, 以 malloc 為例,傳回值是 void*,若配置失敗是傳回 NULL; 又以 Win32 API - HWND CreateWindow(...) 為例,失敗也是傳回 NULL。 3. 如果對於錯誤敏感度極高的話,的確如您所說要一直去 try ... catch 但這樣寫下來幾乎每個 func 都不會是 void, 至於什麼時候才可以放心寫 void - 應該是規劃時的問題, 我就有不少函數本來是沒 return, 最後改成 return int, 只是我沒用 try-catch ,只有用 if-else 而已。 4. 即使是內建函式,在調用時也要注意引數,以免發生意外的結果。 如: char str1[10] = "Hello,"; char *str2 = "World!!"; strcat(str1, str2); 這例子我想就不用多說了,要借此說明的是,在寫下 function 時, 把您所考慮到的限制為該 function 進行註明會是較好的, 即使日後真的發現這 function 要改過,到時也比較容易上手。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.142
QQ29:恩 有些的確是這樣 但如果分工後 我必須在wrap一次這些API 01/03 12:46
QQ29:就變成 error handling都在我身上要做完 就好像沒這麼單純 01/03 12:46
QQ29:要處理所有奇怪的case..... 01/03 12:46
這段話其實我有點意外,我是沒 team work 的經驗, 以為 team work 在分工時,似乎有人先把重要的函數、全域變數規劃好, 包含參數引數和傳回值都規劃,以下情形假設沒有人規劃這些東西。 如果函數是你寫的, 偷懶一點的方法是全都傳回 int, ( 這問題似乎可以牽拖到 void main() 和 int main() ) 還想不到有什麼樣的 error 時就 return 0, 其它的 error message 再慢慢定義。 如果函數是開發團隊他人寫的, 會這麼寫就代表的確可能有這麼多的意外, 那您分配到的工作的確就是針對這麼多意外去做處理。 ※ 編輯: tropical72 來自: 180.177.76.142 (01/03 13:04)
shrekwang:ANSI C 回傳指標就要用 void 的樣子... 01/03 13:25
xatier:那個是 void* 型,不一樣 01/03 18:14
xatier:void* 指標可以丟給其他型態的指標使用 (C++要轉型 C不用 01/03 18:15