整理自exit函式和return函式
1)exit用於在程式執行的過程中隨時結束程式,exit的引數是返回給os的。main函式結束時也會隱式地呼叫exit函式。exit函式執行時首先會執行由atexit()函式登記的函式,然後會做一些自身的清理工作,同時重新整理所有輸出流、關閉所有開啟的流並且關閉通過標準i/o函式tmpfile()建立的臨時檔案。
exit是結束乙個程序,它將刪除程序使用的記憶體空間,同時把錯誤資訊返回父程序;而return是返回函式值並退出函式。通常情況:exit(0)表示程式正常, exit(1)和exit(-1)表示程式異常退出,exit(2)表示表示系統找不到指定的檔案。在整個程式中,只要呼叫exit就結束(當前程序或者在main時候為整個程式)。
2)return是語言級別的,它表示了呼叫堆疊的返回;return( )是當前函式返回,當然如果是在主函式main, 自然也就結束當前程序了,如果不是,那就是退回上一層呼叫。在多個程序時。如果有時要檢測上個程序是否正常退出。就要用到上個程序的返回值,依次類推。而exit是系統呼叫級別的,它表示了乙個程序的結束。
3)exit函式是退出應用程式,並將應用程式的乙個狀態返回給os,這個狀態標識了應用程式的一些執行資訊。
4)和機器和作業系統有關的一般是: 0為正常退出,非0為非正常退出;
exit(int n)其實就是直接退出程式,因為預設的標準程式入口為 int main(int argc, char** argv),返回值是int型的。一般在shell下面,執行乙個程式,然後使用命令echo $?就能得到該程式的返回值,也就是退出值,在main()裡面,你可以用return n,也能夠直接用exit(n)來做。unix預設的正確退出是返回0,錯誤返回非0。
理論上exit可以返回小於256的任何整數。返回的不同數值主要是給呼叫者作不同處理的。
單獨的程序是返回給作業系統的。如果是多程序,是返回給父程序的。父程序裡面呼叫waitpid()等函式得到子程序退出的狀態,以便作不同處理。根據相應的返回值來讓呼叫者作出相應的處理。總的說來,exit()就是當前程序把控制權返回給呼叫該程式的程式,括號裡的是返回值,告訴呼叫程式該程式的執行狀態。
c程式是從main函式開始執行,原型如下:int main(int argc, char *argv);通常main的返回值是int型,正確返回0。如果main的返回值為void,某些編譯器會給出警告,此時main的返回值通常是0。
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。
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()退出程式,則它不關閉任何檔案,不清除任何緩衝器、也不呼叫任何終止函式!
c語言中return與exit的區別
tag 1,exit用於在程式執行的過程中隨時結束程式,exit的引數是返回給os的。main函式結束時也會隱式地呼叫exit函式。exit函式執行時首先會執行由atexit 函式登記的函式,然後會做一些自身的清理工作,同時重新整理所有輸出流 關閉所有開啟的流並且關閉通過標準i o函式tmpfile...
C語言中的exit與return的區別
exit 結束當前程序 當前程式 在整個程式中,只要呼叫 exit 就結束 exit 0 表示程序正常退出.返回 0 exit 1 表示程序非正常退出.返回 1.exit與return的區別 exit 函式與return語句的最大區別在於,呼叫exit 函式將會結束當前程序,同時刪除子程序所占用的記...
詳解C語言中return與exit的區別
詳解c語言中return與exit的區別 1,exit用於在程式執行的過程中隨時結束程式,exit的引數是返回給os的。main函式結束時也會隱式地呼叫exit函式。exit函式執行時首先會執行由atexit 函式登記的函式,然後會做一些自身的清理工作,同時重新整理所有輸出流 關閉所有開啟的流並且關...