Re: [問題] Return值是void的使用時機....

看板C_and_CPP作者 (藍影)時間15年前 (2011/01/03 12:44), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串2/5 (看更多)
原文恕刪 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

01/03 12:46, , 1F
恩 有些的確是這樣 但如果分工後 我必須在wrap一次這些API
01/03 12:46, 1F

01/03 12:46, , 2F
就變成 error handling都在我身上要做完 就好像沒這麼單純
01/03 12:46, 2F

01/03 12:46, , 3F
要處理所有奇怪的case.....
01/03 12:46, 3F
這段話其實我有點意外,我是沒 team work 的經驗, 以為 team work 在分工時,似乎有人先把重要的函數、全域變數規劃好, 包含參數引數和傳回值都規劃,以下情形假設沒有人規劃這些東西。 如果函數是你寫的, 偷懶一點的方法是全都傳回 int, ( 這問題似乎可以牽拖到 void main() 和 int main() ) 還想不到有什麼樣的 error 時就 return 0, 其它的 error message 再慢慢定義。 如果函數是開發團隊他人寫的, 會這麼寫就代表的確可能有這麼多的意外, 那您分配到的工作的確就是針對這麼多意外去做處理。 ※ 編輯: tropical72 來自: 180.177.76.142 (01/03 13:04)

01/03 13:25, , 4F
ANSI C 回傳指標就要用 void 的樣子...
01/03 13:25, 4F

01/03 18:14, , 5F
那個是 void* 型,不一樣
01/03 18:14, 5F

01/03 18:15, , 6F
void* 指標可以丟給其他型態的指標使用 (C++要轉型 C不用
01/03 18:15, 6F
文章代碼(AID): #1D8LH18g (C_and_CPP)
文章代碼(AID): #1D8LH18g (C_and_CPP)