C語言當函式執行成功時return1還是0

2022-10-03 15:51:16 字數 1549 閱讀 8266

目錄

今天分享的內容是關於函式執行成功,返回0還是1的討論~

基本上,沒有人會將大段的c語言**全部塞入 main() 函式,更好的做法是按照復用率高,耦合性低的原則,盡可能的將**拆分不同的功能模組,並封裝成函式。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 都是「非零值」,而成功作為失敗的對立面,也即「非零值」的對立面,myop程式設計客棧en() 函式使用返回值 0 表示成功無可厚非。

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

程式設計客棧if( is_true() )

printf("true\n");

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

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

只不過,如果希望我們編寫的**能夠被大多數同行愉快的使用,最好遵守下「行業潛規則」。

當然了,若是希望我們的c語言**應用性更廣,則可以使用標準標頭檔案裡預先定義好的 exit_success 和 exit_failure 巨集。

當執行緒函式為C 類成員函式時

很多時候我們在c 多執行緒開發時,都會或多或少遇到執行緒函式為c 類中的某個成員函式,此時可能會發生什麼呢?你有可能會雜麼做呢?接下來我就為大家總結一下我在這方面走過的乙個歷程 記得我在之前在寫乙個udp傳輸檔案的程式時,我就第一次遇到了執行緒函式為c 類的成員函式,當時遇到的問題,大概意思如下 i...

C語言 printf函式執行順序

printf函式是從左往右讀取,然後將先讀取放到棧底,最後讀取的放在棧頂,處理時候是從棧頂開始的,所有我們看見的結果是,從右邊開始處理的。我們先看下這段 c語言經典面試題 include intmain int p arr p 100 printf d d n p p return0 輸出結果 13...

C 函式返回類物件時是否執行析構函式

includeusing namespace std struct a a const a a a f a g int main vs2019結果 f copy constructor destructor gdestructor destructormingw64 g v8.3.0 10.1.0 ...