Re: [問題] Return值是void的使用時機....
原文恕刪
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
01/03 12:46, 1F
→
01/03 12:46, , 2F
01/03 12:46, 2F
→
01/03 12:46, , 3F
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
01/03 13:25, 4F
→
01/03 18:14, , 5F
01/03 18:14, 5F
→
01/03 18:15, , 6F
01/03 18:15, 6F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 5 篇):