c 程式設計中的exit(-1)和 return -1
阿新 • • 發佈:2019-02-09
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; } |
對於一整個函式,C11可以用_Noreturn,C++11可以用[[noreturn]],指示不會返回,編譯器不需要對此進行檢查(不過要是真的返回了就UB了,一般應會被警告)。
if外面也有return……那可能只是維護上的原因了。比如原來就有return,後來把這裡改成exit又沒清理乾淨。