天天看點

return和 exit的差別

C/C++ code

int
    fun(
   int
    x){
    
   if
   (x
   ==
   0
   )
        
   return
    
   0
   ;
    
   else
   
        
   return
    
   1
   ;
}


   int
    main(){
    
   int
    i
   =
   100
   ;
    
   if
   (fun(i) 
   >
    
   0
   )
        printf(
   "
   傳回大于0的值\n
   "
   );

    
   return
    
   0
   ; 
   //
   這個0,告訴作業系統,程式運作成功
   

   }

  
      

return和exit有差別:

1,exit用于在程式運作的過程中随時結束程式,exit的參數是傳回給OS的。main函數結束時也會隐式地調用exit函數。exit函數運作時首先會執行由atexit()函數登記的函數,然後會做一些自身的清理工作,同時重新整理所有輸出流、關閉所有打開的流并且關閉通過标準I/O函數tmpfile()建立的臨時檔案。exit是結束一個程序,它将删除程序使用的記憶體空間,同時把錯誤資訊傳回父程序,而return是傳回函數值并退出函數 

2,return是語言級别的,它表示了調用堆棧的傳回;而exit是系統調用級别的,它表示了一個程序的結束。

3,exit函數是退出應用程式,并将應用程式的一個狀态傳回給OS,這個狀态辨別了應用程式的一些運作資訊。

4,和機器和作業系統有關一般是   0 為正常退出  非0 為非正常退出

5,void exit(int status); 

6,atexit()函數的參數是一個函數指針,函數指針指向一個沒有參數也沒有傳回值的函數。atexit()的函數原型是:int atexit (void (*)(void));在一個程式中最多可以用atexit()注冊32個處理函數,這些處理函數的調用順序與其注冊的順序相反,也即最先注冊的最後調用,最後注冊的最先調用。

一般程式執行到 main() 的結束就完成了, 如果想在程式結束時做一些事情, 可以嘗試着用這個函數.

example:

#include 

#include 

void f1(void)

{

     printf("exit f1\n");

}

void f2(void)

{

     printf("exit f2\n");

}

int main()

{

     atexit(f1);

     atexit(f2);

     printf("exit main\n");

     return 0;

}

繼續閱讀