函式介面的兩個要素是引數和返回值。在c語言中,函式的引數和返回值的傳遞方式有兩種:值傳遞和指標傳遞。在c++語言中多了引用傳遞。
1->函式引數
a):引數的書寫要完整,不要只寫了引數的型別,而省略了引數的名字,如果函式沒有引數就用void填充
b):引數的命名要恰當,順序要合理
例如: void strincopy(char *str,char *str2);就很難弄明白字串是從str1拷貝到str2,還是相反過來。
但是寫成:void stringcopy(char *strdestination,char *stringsource);就容易明白多了。
c):如果引數是指標,且僅作為輸入作用,則應該在型別前面加上const,以防指標在函式體內被意外的修改
d):如果輸入的引數以值傳遞的方式傳遞物件,則宜該用」const t &「的方式傳遞可以省去臨時物件構造和析構過程的開銷,從而提高效率
e):避免函式有太多的引數,引數的個數應當盡量控制在5個以內,盡量不要使用型別和數目不確定的引數
2->返回值
a):不要省略返回值的型別。如果函式沒有返回值,那麼應當宣告為void型別
b):函式名字與返回值型別雜語義上不可衝突
c):不要把正常值好錯誤標誌混在一起返回
d):有時候函式原本不需要返回值,但是為了增加靈活性,例如支援鏈式表達,可以附加返回值。
例如字串拷貝函式strcpy的原型:char *strcpy(char *strdeset,const char *srsrc);
e):如果返回值是乙個物件,有時候返回值可以用」引用傳遞「代替值傳遞
3->函式的內部實現
因為函式的功能不同,其內部實現一定也是不同的,也無法制定乙個統一的標準。我們所要說的內部實現指的是函式體」入口處「和」出口處「的規範。
a):在函式體的」入口處「,要對引數的有效性進行檢查,例如assert函式
b):在函式的」出口處「,對return語句的正確性和效率進行檢查
注意幾點:return語句不可以返回指向」棧記憶體「的指標或者引用;要弄清楚返回的究竟是」值「、」指標「還是」引用「;返回的是乙個物件,要考慮返回的效率
4->其他關於函式的建議
a):函式的功能要單一
b):盡量避免函式帶有」記憶「功能,例如static變數
c):既要檢查輸入引數的有效性,也要檢查通過其他方式進入函式內的變數的有效性
d):用於出錯處理的返回值一定要清楚。
5->斷言的使用
斷言僅在debug版本中起作用的巨集,它用於檢查不應該發生的情況。在執行的過程中,如果assert的引數為假,那麼就會停止程式的執行
斷言使用時候要注意:
使用斷言捕捉不應該發生的非法情況,而不是錯誤的情況
在函式的入口處,使用斷言來檢查引數的有效性
感動那件小事!
首先送上我最崇高的敬意送給那些一直堅持在第一線的兄弟!來到兄弟連已經快2個禮拜,給我的身心帶來了很多以往不同的地方,兄弟們都知道晚上時間是最難熬的,不是因為 的多少和困難而是因為氣溫的公升高,走廊和教室裡面完全是2個溫度,每天兄弟們寫 都是汗流浹背的,頭腦的悶熱和身體的汗濕並沒有阻擋兄弟們對 的痴狂...
感動那件小事!
首先送上我最崇高的敬意送給那些一直堅持在第一線的兄弟!來到兄弟連已經快2個禮拜,給我的身心帶來了很多以往不同的地方,兄弟們都知道晚上時間是最難熬的,不是因為 的多少和困難而是因為氣溫的公升高,走廊和教室裡面完全是2個溫度,每天兄弟們寫 都是汗流浹背的,頭腦的悶熱和身體的汗濕並沒有阻擋兄弟們對 的痴狂...
感動那件小事!
首先送上我最崇高的敬意送給那些一直堅持在第一線的兄弟!來到兄弟連已經快2個禮拜,給我的身心帶來了很多以往不同的地方,兄弟們都知道晚上時間是最難熬的,不是因為 的多少和困難而是因為氣溫的公升高,走廊和教室裡面完全是2個溫度,每天兄弟們寫 都是汗流浹背的,頭腦的悶熱和身體的汗濕並沒有阻擋兄弟們對 的痴狂...