1. 程式人生 > >c 程式設計中的exit(-1)和 return -1

c 程式設計中的exit(-1)和 return -1

1、

首先這個exit是針對你整個程式的程序而言的,也就是說讓你的程序退出(不管這行程式碼是在程式的哪個地方,哪個函式),並返回了這個值。
然後,你要知道你的程式的程序是有父程序的,除了系統開機時自啟動的程序(Linux裡面就是init,PID是0)。所以返回的這個值就會被你的程式的父程序接受到,進而知道你的程式是正常退出還是出錯中斷的。

在main函式中我們通常使用return (0);這樣的方式返回一個值。

但這是限定在非void情況下的也就是void main()這樣的形式。

exit()通常是用在子程式中用來終結程式用的,使用後程序自動結束跳會作業系統。

但在如果把exit用在main內的時候無論main是否定義成void返回的值都是有效的,並且exit不需要考慮



#include <iostream> 
#include <string> 
using namespace std; 

int main() 

exit (1);//等價於return (1); 
}

數字0,1,-1會被寫入環境變數ERRORLEVEL,其它程式可以由此判斷程式結束狀態。   
一般0為正常推出,其它數字為異常,其對應的錯誤可以自己指定。
exit用於在程式執行的過程中隨時結束程式,函式原型void exit(int status),exit的引數是返回給作業系統的。這個引數識了應用程式的一些執行資訊。
    和作業系統有關一般是0為正常退出,非0為非正常退出。非0的數字可以是自己擬定的可以是任意一個整型數字。
    通過這個引數用來標識程式是在那一部分退出的。如問題中的程式,如果
作業系統
檢測到程式退出時exit的引數是-1,那麼就可以知道是因為if(f1==NULL || f2==NULL)中的表示式為真而退出的。如果不是-1而是其他的數字,那麼代表程式是在其他地方退出的。

這是一般用來區別錯誤狀態的一種函式返回狀態法,除了以外的數字都是有錯誤的,但是錯誤類別是可以區分的,根據那個數字來區分:一般在errorno變數中!

2、

http://bbs.chinaunix.net/thread-3758347-1-1.html

如題, 比如下面的程式碼。return -1;會被執行嗎?這是個if(),它會return到哪裡去呢。請指教下。   
if (ioctl(raw_sock_fd, SIOCGIFHWADDR, &ifstruct) == -1)
    {
        printf("\nioctl SIOCGIFHWADDR [%s] Error!!!", dev_name);
        close(raw_sock_fd);
        exit(1);
        return -1;
    }
不會被執行的!非void沒指定return的值引起UB,一般編譯器會警告,嚴格檢查時可能報錯。所以以防萬一通常都加上個,儘管實際上不會被執行到。
對於一整個函式,C11可以用_Noreturn,C++11可以用[[noreturn]],指示不會返回,編譯器不需要對此進行檢查(不過要是真的返回了就UB了,一般應會被警告)。


if外面也有return……那可能只是維護上的原因了。比如原來就有return,後來把這裡改成exit又沒清理乾淨。