2012-06-10 26 views
3

快速的問題..有沒有一種「正確」的方式來終止從無效輸入的C/C++程序?迄今爲止,我在C/C++的職業生涯已經涉及做這樣的事情:從錯誤輸入/行爲的C/C++程序中退出「正確」的方式

// C 
#include <stdio.h> 
int main(int argc, char **argv) 
{ 
    if (argc != 3) { 
     fprintf(stderr, "Error: Usage: %s [some param] [some param]\n", argv[0]); 
     return 1; 
    } 

    /* rest of program */ 

    return 0; 
} 

在C++中,它可能是cerr而不是fprintf(srderr...)iostream代替或stdio.h

這是一個好的/可以接受的方式,還是有我不知道的標準?

謝謝!

+0

''頭文件將'EXIT_FAILURE'宏定義爲一個值,您可以從main返回值或傳遞給'exit()'來指示失敗。 – jxh

+0

爲什麼不用std :: cerr來報告消息。 –

+1

@Loki因爲這不是有效的C,並且該問題適用於C和C++。 –

回答

11

基本約定是返回非零值值以指示退出時的某種錯誤情況。返回值用於表示正常的程序終止。

沒有什麼可以阻止您提供非零值列表並將它們與特定錯誤條件關聯,以便可以根據退出值識別特定錯誤。

例如,如果shell程序正在運行程序,它可以通過檢查退出值來採取適當的操作。錯誤消息stderr對我們很有用,但可以通過編程方式使用退出值並提供更多的靈活性。

通常值0 - ,其餘爲系統根據Job crashes and exit codes

+0

所以我錯誤返回的非零值是任意的,我可以決定'return 1'表示X,'return 2'表示Y? – adelbertc

+0

@yes,您可以將任何值與錯誤條件關聯,這是您的程序。通常值0-127被重新設置以供您使用,請參閱:http://www.slac.stanford.edu/BFROOT/www/Computing/Environment/Tools/Batch/exitcode.html – Levon

+0

在BSD上,有時在Linux上, 'sysexits.h'中甚至有一組標準的錯誤編號。以下是手冊頁:http://www.unix.com/man-page/All/3/sysexits/。 – Linuxios

1

在DOS .bat文件的世界那就是成功地執行程序返回0公約127 resevered供您使用,這則檢查通過批處理文件中的%ERRORLEVEL%值。非零值表示出了問題,返回的確切值取決於程序員,應該記錄在某處。 More here

的Unix很相似,但似乎根據this

1

或者有更多的specfication,你可以調用exit()功能,而不是return。這是主要的,retrun exp相當於exit(exp)。退出參數可用於任何稱爲此過程的過程,因此程序的成功或失敗可以由另一個將此用作子過程的程序進行測試。傳統上,返回值0表示一切正常;非零值通常表示異常情況。

exit具有可從其他功能調用的優點。

相關問題