筆試面試那件小事(函式)

2021-06-25 10:04:02 字數 1379 閱讀 4817

函式介面的兩個要素是引數和返回值。在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個溫度,每天兄弟們寫 都是汗流浹背的,頭腦的悶熱和身體的汗濕並沒有阻擋兄弟們對 的痴狂...