exit()函數解析

exit()函數介紹

函數名: exit()
所在頭文件:stdlib.h(如果是c++,頭文件:#include < cstdlib >)
功 能: 關閉所有文件,終止正在執行的進程
exit(0)表示正常退出,
exit(x)(x不爲0)都表示異常退出,這個x是返回給操作系統(包括UNIX,Linux,和MS DOS)的,以供其他程序使用。
stdlib.h: void exit(int status);//參 數status,程序退出的返回值

exit()和return的區別

如果main()在一個遞歸程序中,exit()仍然會終止程序;
但return將控制權移交給遞歸的前一級,直到最初的那一級,此時return纔會終止程序。
即使在除main()之外的函數中調用exit(),它也將終止程序。
return();是某個函數的結束,並返回結果。

  1. return返回函數值,是關鍵字; exit 是一個函數。

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

  3. return是函數的退出(返回);exit是進程的退出。

  4. return是C語言提供的,exit是操作系統提供的(或者函數庫中給出的)。

  5. return用於結束一個函數的執行,將函數的執行信息傳出個其他調用函數使用;exit函數是退出應用程序,刪除進程使用的內存空間,並將應用程序的一個狀態返回給OS,這個狀態標識了應用程序的一些運行信息,這個信息和機器和操作系統有關,一般是 0 爲正常退出,非0 爲非正常退出。

  6. 非主函數中調用return和exit效果很明顯,但是在main函數中調用return和exit的現象就很模糊,多數情況下現象都是一致的。

測試1

#include<stdlib.h>
#include<stdio.h>
#include <string.h>
int main(int argc,char*argv[])
{
        int status;
        printf("Enter either 1 or 2\n");
        status=getchar();
        exit(status-'0');
        printf("this line is never reached\n");
        return 0;
}

在這裏插入圖片描述
調用exit()函數退出時,printf(“this line is never reached\n”);和return 0;和兩句都不會執行。

測試2

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int output( )
{
   int a[10];
   ofstream outfile("f1.dat",ios::out);//定義文件流對象,打開磁盤文件"f1.dat"
   if(!outfile)                        //如果打開失敗,outfile返回值
   {
      cerr<<"open error!"<<endl;
      exit(1);
   }
   cout<<"enter 10 integer numbers:"<<endl;
   for(int i=0;i<10;i++)
   {
      cin>>a[i];
      outfile<<a[i]<<" ";
   }            //向磁盤文件"f1.dat"輸出數據
   outfile.close();                   //關閉磁盤文件"f1.dat"
   return 0;
}

int main(){
        output();
        cout<<"end!"<<endl;
        return 0;
}

在這裏插入圖片描述
未進入exit(1) 分支,正常執行end!
把if(!outfile)修改爲if(outfile),讓程序估計進入exit(1)分支

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int output( )
{
   int a[10];
   ofstream outfile("f1.dat",ios::out);//定義文件流對象,打開磁盤文件"f1.dat"
   if(outfile)                        //如果打開失敗,outfile返回值
   {
      cerr<<"open error!"<<endl;
      exit(1);
   }
   cout<<"enter 10 integer numbers:"<<endl;
   for(int i=0;i<10;i++)
   {
      cin>>a[i];
      outfile<<a[i]<<" ";
   }            //向磁盤文件"f1.dat"輸出數據
   outfile.close();                   //關閉磁盤文件"f1.dat"
   return 0;
}


int main(){
        output();
        cout<<"end!"<<endl;
        return 0;
}

在這裏插入圖片描述
執行exit(1)函數後,整個程序直接結束,exit(1)後面的代碼都不會執行,output()子函數也不會執行返回,main函數後面的語句cout<<“end!”<<endl;也不會執行。和return不一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章