程序代碼中退出函數exit()與返回函數return ()的區別
- exit(0):正常運行程序並退出程序;
- exit(1):非正常運行導致退出程序;
- return():返回函數,若在主函數中,則會退出函數並返回一值。
解析:
1. return返回函數值,是關鍵字; exit 是一個函數。
2. return是語言級別的,它表示了調用堆棧的返回;而exit是系統調用級別的,它表示了一個進程的結束。
3. return是函數的退出(返回);exit是進程的退出。
4. return是C語言提供的,exit是操作系統提供的(或者函數庫中給出的)。exit是一個庫函數,exit(1)表示發生錯誤后退出程序,exit(0)表示正常退出。在stdlib.h中exit函數是這樣子定義的:void exit(int status)。這個系統調用是用來終止一個進程的,無論在程序中的什么位置,只要執行exit,進程就會從終止進程的運行。講到exit這個系統調用,就要提及另外一個系統調用,_exit,_exit()函數位於unistd.h中,相比於exit(),_exit()函數的功能最為簡單,直接終止進程的運行,釋放其所使用的內存空間,並銷毀在內存中的數據結構,而exit()在於在進程退出之前要檢查文件的狀態,將文件緩沖區中的內容寫回文件。
5. return用於結束一個函數的執行,將函數的執行信息傳出給其他調用函數使用;exit函數是退出應用程序,刪除進程使用的內存空間,並將應用程序的一個狀態返回給OS或其父進程,這個狀態標識了應用程序的一些運行信息,這個信息和機器和操作系統有關,一般是 0 為正常退出, 非0 為非正常退出。
6. 非主函數中調用return和exit效果很明顯,但是在main函數中調用return和exit的現象就很模糊,多數情況下現象都是一致的。
參考:http://blog.sina.com.cn/s/blog_99f5031a0101lshp.html