2012-01-08 94 views
1

當C++程序失敗時返回的值是多少?我已閱讀了一些關於此的文章,但沒有明確說明。C++在失敗時是否返回0或NULL?

如果它不返回0,有沒有辦法讓程序在失敗時返回0或NULL?我有一些關於std :: nothrow的東西,但到目前爲止還沒有找到實際的例子。任何人都可以向我澄清這一點?

+0

0是成功的價值。 – 2012-01-08 14:51:45

+0

你的意思是程序的退出狀態?如果是,爲什麼你的程序總是返回'EXIT_SUCCESS'很重要?如果你在Linux上,你可以在Makefile或Shellscript:'program ||中使用它真正的',這總是成功的。 – 2012-01-08 14:51:52

+0

不知道我明白你的意思是「返回值」,如果這是程序的退出代碼,0(非空,它不是指針)通常是_success_的標誌,而不是失敗。 – Mat 2012-01-08 14:52:16

回答

4

就我所知,NULL只是一個0的宏。

在stdlib.h中:

/* Define NULL pointer value */ 

#ifndef NULL 
#ifdef __cplusplus 
#define NULL 0 
#else 
#define NULL ((void *)0) 
#endif 
#endif 

source(德國),在那裏我複製這從還指出,使用NULL不建議由斯特勞斯。

+0

感謝您編輯Sathya。如果我把這條線插入塊或者出去,我很掙扎,但將它分開是個好方法:D – Baarn 2012-01-08 14:58:50

9

該標準定義了具有明顯含義的EXIT_SUCCESSEXIT_FAILURE錯誤代碼。可以將它們傳遞給exit()函數,或者使用main函數中的return聲明明確返回。您可以包裝整個main功能,如

int main() try { 
... 
} catch(...) { 
return EXIT_SUCCESS; 
} 

您的問題是不清楚的。

+0

您正確地提到'EXIT_SUCCESS',那麼爲什麼不在示例程序中使用它呢? – 2012-01-08 14:54:10

+0

好點,謝謝。使用0成功是我的根深蒂固的習慣。退出代碼。 – zvrba 2012-01-08 14:56:59

+0

嘗試catch塊dosn't工作在一些「微軟具體」的投擲。但它可以在用戶定義的投擲中完美運行。 – codekiddy 2012-01-08 14:57:04

0

通常認爲程序成功時返回0,否則返回非零值。

您從主函數返回設置返回值:

int main(int argc, char ** argv){ 
    return 0; // Finish with success 
} 

或通過將返回代碼爲exit(int)功能。

另外值得注意的是,NULL被精確定義爲(void*)0,在討論指針時使用,而不是整數。如果你不明白這是什麼意思,請閱讀一個體面的C教程。

0

NULL是宏,並將其是相同SA 0,它的定義如下所示:

#define NULL 0 
當程序失敗它默認信令的操作系統程序失敗返回1

。 如果返回值大於1,則由寫入該程序的程序員完成。

如果程序執行完成,它總是retun的0. 在程序失敗時,你不應該重置除0以外的值,因爲你不知道它是否失敗。

如果返回值低於0,那也意味着失敗。 所以只有成功值是0或NULL是相同的。

-1

成功運行通常有錯誤代碼0,除0以外的任何其他指示都表示某種錯誤。

Error code      Value    Description 
ERROR_SUCCESS     0   The action completed successfully. 
ERROR_INVALID_DATA    13   The data is invalid. 
ERROR_INVALID_PARAMETER   87   One of the parameters was invalid. 

更多:http://msdn.microsoft.com/en-us/library/windows/desktop/aa368542(v=vs.85).aspx

+0

「這些錯誤代碼由Windows Installer函數返回」。錯誤的域名。 – MSalters 2012-01-09 07:53:23

1

的問題是有點不清楚。您從main返回的值恰恰是您傳遞給main中的return聲明的值。對此沒有其他可以說的。

現在,你應該問什麼問題?有兩個方面:一個是C++端,另一個是主機端(即操作系統)。

您無法控制給定的操作系統如何處理啓動的程序的錯誤狀況。唯一令C++標準保證此:

  • 如果您main回報0EXIT_SUCCESS,或者根本沒有,那麼程序在信號成功地結束;和

  • 如果您的main返回EXIT_FAILURE,那麼程序以信號失敗的方式結束。

程序的實際返回值完全取決於平臺,即操作系統和運行時環境。

例如,在Linux上的成功是經由一個非零值經由值0和故障信號的,通過簡單地的main()值返回回OS(並限定EXIT_SUCCESS作爲所以可以執行一個C或C++程序0)。其他平臺可能會選擇不同的語義!