exit函式和return函式的區別

2021-06-01 11:55:02 字數 2154 閱讀 3659

1、exit函式和return函式的主要區別是:

1)exit用於在程式執行的過程中隨時結束程式,其引數是返回給os的。也可以這麼講:exit函式是退出應用程式,並將應用程式的乙個狀態返回給os,這個狀態標識了應用程式的一些執行資訊。

main函式結束時也會隱式地呼叫exit函式,exit函式執行時首先會執行由atexit()函式登記的函式,然後會做一些自身的清理工作,同時重新整理所有輸出流、關閉所有開啟的流並且關閉通過標準i/o函式tmpfile()建立的臨時檔案。

exit是系統呼叫級別的,它表示了乙個程序的結束,它將刪除程序使用的記憶體空間,同時把錯誤資訊返回父程序。通常情況:exit(0)表示程式正常, exit(1)和exit(-1)表示程式異常退出,exit(2)表示系統找不到指定的檔案。在整個程式中,只要呼叫exit就結束。

2)return是語言級別的,它表示了呼叫堆疊的返回;return是返回函式值並退出函式,通常0為正常退出,非0為非正常退出,請注意,如果是在主函式main, 自然也就結束當前程序了(也就是說,在main()裡面,你可以用return n,也能夠直接用exit(n)來做),如果不是在main函式中,那就是退回上一層呼叫。在多個程序時,如果有時要檢測上個程序是否正常退出,就要用到上個程序的返回值。

2、程序環境與程序控制

exit(int n)其實就是直接退出程式,因為預設的標準程式入口為 int main(int argc, char** argv),返回值是int型的。一般在shell下面,執行乙個程式,然後使用命令echo $?就能得到該程式的返回值,也就是退出值。

理論上exit可以返回小於256的任何整數,返回的不同數值主要是給呼叫者作不同處理的。

對於單獨的程序exit的返回值是返回給作業系統的,但如果是多程序,則是返回給父程序的。父程序裡面呼叫waitpid()等函式得到子程序退出的狀態,以便作不同處理。根據相應的返回值來讓呼叫者作出相應的處理。

總的說來,exit()就是當前程序把其控制權返回給呼叫該子程式的主程式, 括號裡的是返回值,告訴呼叫程式該程式的執行狀態。

1)程序的開始:

c程式是從main函式開始執行, 原型如下: int main(int argc, char *argv); 通常main的返回值是int型, 正確返回0。

2)程序終止:

c程式的終止分為兩種: 正常終止和異常終止。正常終止分為: return, exit, _exit, _exit, pthreade_exit。異常中指分為: abort, signal, 執行緒響應取消。

主要說一下正常終止的前4種, 即exit系列函式.

#include

void exit(int status);

void _exit(int status);

#include

void _exit(int status);

以上3個函式的區別是: exit()(或return 0)會呼叫終止處理程式和使用者空間的標準i/o清理程式(如fclose), _exit和_exit不呼叫而直接由核心接管進行清理。因此, 在main函式中exit(0)等價於return 0. 

3)atexit終止處理程式:

iso c規定, 乙個程序最多可登記32個終止處理函式, 這些函式由exit按登記相反的順序自動呼叫。如果同一函式登記多次, 也會被呼叫多次。

原型如下:

#include

int atexit(void (*func)(void));

其中引數是乙個函式指標, 指向終止處理函式, 該函式無參無返回值。atexit函式本身成功呼叫後返回0。

以下面的程式為例:

#include

static void myexit1()

static void myexit2()

int main()

執行結果:

$ ./a.out

main is done

first exit handler

first exit handler

second exit handler

注意上面的結果,可以發現這些函式由exit按登記相反的順序自動呼叫(先myexit1後myexit2)。如果同一函式登記多次, 也會被呼叫多次(如這裡的myexit1)。而這些處理函式都是在程式退出的時候利用atexit函式呼叫了這些處理函式。但是如果用_exit()退出程式,則它不關閉任何檔案,不清除任何緩衝器、也不呼叫任何終止函式!

exit函式與return區別

exit int n 其實就是直接退出程式,因為預設的標準程式入口為 int main int argc,char argv 返回值是 int型的。一般在 shell 下面,執行乙個程式,然後使用命令 echo 就能得到該程式的返回值,也就是退出值,在 main 裡面,你可以用 return n 也...

return函式與exit函式的總結

exit 0 表示程式正常,exit 1 exit 1 表示程式異常退出 exit 結束當前程序 當前程式 在整個程式中,只要呼叫 exit 就結束 return 是當前函式返回,當然如果是在主函式main,自然也就結束當前程序了,如果不是,那就是退回上一層呼叫。在多個程序時.如果有時要檢測上程序是...

return和exit以及C語言遞迴函式

在主函式main 中,return整個函式退出,在子函式中return,只退出子函式。exit無論在函式什麼位置退出整個函式 include void recursive int a printf 遞迴出來的值位址 p 對應值 d n a,a void main 列印結果 總結 遞迴的結果在輸出時,...