函式失敗返回 C語言函式返回1和返回0區別?

2021-10-25 13:03:41 字數 1694 閱讀 5280

基本上,沒有人會將大段的c語言**全部塞入 main() 函式,更好的做法是按照復用率高,耦合性低的原則,盡可能的將**拆分不同的功能模組,並封裝成函式。c語言**的組合千變萬化,因此函式的功能可能會比較複雜,不同的輸入,常常產生不同的輸出結果。

不同的輸入,常常產生不同的輸出結果

c語言函式的返回值

c語言函式可以通過返回值表示輸出結果,例如 log() 函式的返回值會根據不同的輸入,返回不同的值。再比如,我們定義乙個函式 myopen(),用於開啟某個檔案,那麼,這個函式要麼能夠成功開啟檔案,要麼開啟檔案失敗,這時,可以通過返回值區分「成功」和「失敗」。

當然,myopen() 函式失敗的原因可能很多,但不是本文關注的重點,本文更關心的是,該以何值表示「成功」,何值表示「失敗」。按照c語言語法, 0 表示假,非零(常常用 1)表示真,那是否函式也用 0 返回值表示「失敗」,1 返回值表示「成功」呢?

「行業潛規則」

c語言函式當然可以使用返回值 0 表示「失敗」,用返回值 1 表示「成功」。事實上,c語言函式用什麼樣的返回值表示成功或者失敗,只是一種人為的約定,函式的呼叫者遵守這個「約定」就可以了。

c語言也有「行業潛規則」

不過,對於一般的函式,大多數c語言程式設計師常常使用返回值 0 表示成功,非零值表示失敗。因此,如果希望我們定義的函式能夠被大多數人愉快的使用,最好不要反其道而行,遵守「行業潛規則」更好一點。

仔細考慮下,其實c語言函式使用返回值 0 表示成功是有原因的。更一般的c語言函式返回值並不一定只有兩種可能值(成功/失敗),它可能還會返回對應錯誤原因的返回值,總之,函式成功只有一種可能,函式失敗卻有多種可能。

函式成功只有一種可能,函式失敗卻有多種可能

實數要麼是 0,要麼非 0,因此可以將 0 看作乙個比較特殊的「唯一」數值,使用 0 這個「唯一」的返回值,表示唯一的「成功」,多種非零的返回值,表示多種原因的失敗,無疑更好一些。

當然,我們也可以說「實數要麼是 1,要麼非 1」,不過這顯然也不是「行業潛規則」。

例如我們可以規定,如果 myopen() 函式因為「檔案或者目錄不存在」的原因失敗,返回 -1,如果因為「許可權不夠」的原因失敗,則返回 -2。-1 和 -2 都是「非零值」,而成功作為失敗的對立面,也即「非零值」的對立面,myopen() 函式使用返回值 0 表示成功無可厚非。

c語言程式設計師中還有一種「行業潛規則」

當然,c語言程式設計師中還有一種「行業潛規則」。如果定義的函式是個布林函式,也即返回值顯式的使用類似於 bool 關鍵字定義,或者函式名類似於 is_true(),那麼顯然此時應該遵守c語言語法,使用「真」值表示成功,「假」值表示失敗。

if( is_true() )

printf("true\n");

請看上面這兩行c語言**,顯然,遵守c語言語法的布林函式更便於程式設計師寫出布林判斷類的**。

小結

本文主要討論了c語言程式開發中關於函式返回值的問題。可見,使用什麼樣的返回值表示成功,什麼用的返回值表示失敗,其實只是一種人為約定。

只不過,如果希望我們編寫的**能夠被大多數同行愉快的使用,最好遵守下「行業潛規則」。當然了,若是希望我們的c語言**應用性更廣,則可以使用標準標頭檔案裡預先定義好的 exit_success 和 exit_failure 巨集。

c語言函式的陣列返回和指標返回

函式內的陣列和指標都是屬於函式棧空間。如果把陣列或指標返回給外部指標,會發生什麼?1先看看第一種,返回陣列 2看看返回指標的情況 include stdio.h char get c int main int argc,char const ar 這個陣列了,系統或者任務會主動的修改裡面的資料,導致...

函式失敗返回 C 的返回值return

return表示從被調函式返回到主調函式繼續執行,返回時可附帶乙個返回值,由return後面的引數指定。函式可以有返回值也可以沒有返回值,當沒有返回值時,函式型別宣告為void型。每個函式都有型別,如果在定義中沒有給出型別則預設為int型。main 也是函式,並且其返回值總是乙個整數。return通...

c語言 函式返回多個值

慢慢更新哦!分析 全域性變數作為c語言的乙個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得並不是很多。由於全域性變數的作用域是從定義變數開始直到程式結束,而對於編寫有多個返回值的c語言函式,我們可以考慮把要返回的多個值定義成全域性變數。當函式被呼叫時,全域性變數被更改,我們再把更改後的全域...