在C++中,您可以透過下列方式結束程式:
exit函式
在 exit stdlib.h< 中>宣告的函式會終止C++程式。 提供做為 自變數 exit 的值會當做程式的傳回碼或結束代碼傳回給操作系統。 依照慣例,傳回碼為零,表示程式順利完成。 您可以使用 stdlib.hEXIT_FAILURE 中EXIT_SUCCESS定義的常數<和 >,來指出程式的成功或失敗。
abort函式
此 abort 函式也會在標準 include 檔案 <stdlib.h> 中宣告,會終止C++程式。 和 exit 之間的差異abort在於允許exitC++運行時間終止處理進行 (呼叫全域物件解構函式)。
abort 立即終止程式。 函 abort 式會略過初始化全域靜態物件的一般解構程式。 另外也會略過任何使用 atexit 函式指定的特殊處理。
Microsoft特定:基於 Windows 相容性考慮,的 abort Microsoft實作可能會允許在某些情況下執行 DLL 終止程序代碼。 如需詳細資訊,請參閱abort。
atexit函式
使用函 atexit 式來指定在程序終止之前執行的動作。 在結束處理函式執行之前,不會終結呼叫 atexit 之前初始化的全域靜態物件。
return 中的語句 main
return語句可讓您從 main指定傳回值。
return第一個 中的 main 語句就像任何其他return語句一樣。 任何自動變數會終結。 然後, mainexit 使用傳回值作為參數叫用 。 請考慮下列範例:
// return_statement.cpp
#include <stdlib.h>
struct S
{
int value;
};
int main()
{
S s{ 3 };
exit( 3 );
// or
return 3;
}
exit上述範例中的和 return 語句有類似的行為。 兩者都會終止程式,並將值傳回 3 至作業系統。 差異在於 exit 不會終結自動變數 s,而 語句則 return 為 。
一般而言,C++需要傳回值以外的 void 傳回型別的函式。 函式 main 是例外狀況;它可以結束而不使用 return 語句。 在此情況下,它會將實作特定的值傳回叫用程式。 (根據預設,MSVC 會傳回 0。)
線程和靜態物件的解構
當您直接呼叫 exit 時(或是在 語句之後returnmain呼叫時),與目前線程相關聯的線程物件會終結。 接下來,靜態物件會以初始化的反向順序終結(在呼叫指定 atexit給 的函式之後,如果有的話)。 下列範例將示範這類初始化和清除如何運作:
範例
在下列範例中,會先建立和初始化靜態物件sd1sd2,再進入 main。 此程式使用 return 語句終止之後,請先 sd2 終結 ,然後再 sd1終結 。
ShowData 類別的解構函式會關閉與這些靜態物件相關聯的檔案
// using_exit_or_return1.cpp
#include <stdio.h>
class ShowData {
public:
// Constructor opens a file.
ShowData( const char *szDev ) {
errno_t err;
err = fopen_s(&OutputDev, szDev, "w" );
}
// Destructor closes the file.
~ShowData() { fclose( OutputDev ); }
// Disp function shows a string on the output device.
void Disp( char *szData ) {
fputs( szData, OutputDev );
}
private:
FILE *OutputDev;
};
// Define a static object of type ShowData. The output device
// selected is "CON" -- the standard output device.
ShowData sd1 = "CON";
// Define another static object of type ShowData. The output
// is directed to a file called "HELLO.DAT"
ShowData sd2 = "hello.dat";
int main() {
sd1.Disp( "hello to default device\n" );
sd2.Disp( "hello to file hello.dat\n" );
}
撰寫此程序代碼的另一種方式是宣告 ShowData 具有區塊範圍的物件,這會在超出範圍時隱含終結這些物件:
int main() {
ShowData sd1( "CON" ), sd2( "hello.dat" );
sd1.Disp( "hello to default device\n" );
sd2.Disp( "hello to file hello.dat\n" );
}