[語法] return TRUE;與 return var;

看板C_and_CPP (C/C++)作者 (龍騎士2)時間16年前 (2010/04/21 20:55), 編輯推噓5(5021)
留言26則, 9人參與, 最新討論串1/1
(1) -------------------------------------------- bool IsFileExist(char *pFile){ bool bRet = FALSE; FILE* fp = fopen(pFile, "r"); if (fp) { bRet = TRUE; fclose(fp); } return bRet; } --------------------------------------------- (2) --------------------------------------------- bool IsFileExist(char *pFile){ FILE* fp = fopen(pFile, "r"); if (fp) { fclose(fp); return TRUE; } return FALSE; } --------------------------------------------- 這兩個都可以執行無誤 我其實想問兩個問題. 1. 直接 return TRUE/FALSE 有沒有缺點? 2. 在程式段落中直接 return 離開這個副程式, 不讓他執行到最後 這樣的寫法有沒有缺點? (假設該 close 的都有 close) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.34.47 ※ 編輯: longrider 來自: 140.115.34.47 (04/21 21:03)

04/21 21:10, , 1F
有什麼特別的理由要用TRUE/FALSE嗎?
04/21 21:10, 1F

04/21 21:10, , 2F
一般的true/false不好嗎?
04/21 21:10, 2F

04/21 21:12, , 3F
除去這個問題不論的話 (1)的寫法沒什麼好處,用(2)吧
04/21 21:12, 3F

04/21 21:21, , 4F
(1)可以於debug時手動改變回傳值
04/21 21:21, 4F

04/21 21:22, , 5F
當發現fp=NULL但又希望return TRUE好讓後續程式繼續跑
04/21 21:22, 5F

04/21 21:22, , 6F
(1)就很好改
04/21 21:22, 6F

04/21 21:28, , 7F
有種東西叫做 DEBUGGER 啊...
04/21 21:28, 7F

04/21 21:46, , 8F
如果將來接手你 code 的人想在 return 前插入一些東西,
04/21 21:46, 8F

04/21 21:46, , 9F
你用 (1) 的話,他可能改錯的機率至少 50% 以上。
04/21 21:46, 9F

04/21 21:48, , 10F
而且他一定會很疑惑,到底他要不要加 if(bRet) 或
04/21 21:48, 10F

04/21 21:49, , 11F
if(!bRet) 來包住他插入的 code。
04/21 21:49, 11F

04/21 21:49, , 12F
(1) 曾經是過去年代裡標榜的「單一出口」寫法,但 Martin
04/21 21:49, 12F

04/21 21:50, , 13F
Fowler 有在 refactoring 一書中反駁過。
04/21 21:50, 13F

04/21 21:57, , 14F
我覺得直接把指標當 if 的條件, 太依賴隱式轉換了, 應
04/21 21:57, 14F

04/21 21:58, , 15F
該改成fp != NULL or fp != 0
04/21 21:58, 15F

04/21 23:13, , 16F
不過現在有哪些系統的 NULL 並不是 0 的嗎?
04/21 23:13, 16F

04/21 23:14, , 17F
如果 NULL 是零 那麼 if (fp) 還挺安全的 (吧?)
04/21 23:14, 17F

04/21 23:37, , 18F
樓上說的對,這種用法還滿常見的,但不建議用if (!fp),這
04/21 23:37, 18F

04/21 23:37, , 19F
種用法雖也常見,但是就如loveme00835說的,比if(fp)還要
04/21 23:37, 19F

04/21 23:38, , 20F
隱諱難懂,不建議使用.
04/21 23:38, 20F

04/22 14:08, , 21F
謝謝各位
04/22 14:08, 21F

04/22 14:35, , 22F
另一個問題又出在,C++ 的爸爸很討厭 NULL,要大家用 0。
04/22 14:35, 22F

04/22 14:35, , 23F
混著 C 和 C++ 的 code 時,很容易看到又有 0 又有 NULL。
04/22 14:35, 23F

04/22 14:52, , 24F
我一直很好奇為什麼C++ prefer 0, but not NULL
04/22 14:52, 24F

04/22 14:53, , 25F
兩者的意義應該都是很清楚的阿
04/22 14:53, 25F

04/22 15:24, , 26F
轉成 void* 或是 int 的差別吧?
04/22 15:24, 26F
文章代碼(AID): #1BplNM60 (C_and_CPP)
文章代碼(AID): #1BplNM60 (C_and_CPP)