2010-09-17 85 views
20

我想從我的主要功能回到像1000更大的價值,但是當我鍵入echo $?它顯示爲0。爲什麼我不能從主函數返回更大的值?

如果我回到喜歡它100顯示正確的值小的值。

我的代碼:

int main(void) 
{ 
    return 1000; 
} 

有上,我們可以返回值有限制嗎?

+0

我得到** 232 **爲'return 1000;'和** 233 **爲'return 1001;' – Lazer 2010-09-17 11:29:09

+5

** 1000%256 = 232 ** – Lazer 2010-09-17 11:41:49

回答

22

這裏有兩個相關的概念:C退出狀態和bash返回碼。它們都覆蓋範圍0-255,但bash使用126以上的數字來達到自己的目的,所以從程序中返回這些數字會令人困惑。

爲了安全地限制退出狀態代碼爲0-127,因爲這是最便攜的,至少暗示了http://docs.python.org/library/sys.html#sys.exit

將C退出狀態放入bash $?變量在執行後,但bash使用127來表示'找不到命令',所以你可能想避免這種情況。 Bash reference page

Bash也使用128-255作爲信號 - 它們表示該過程被一個信號殺死: exit code = 128 + signal number。所以你可能能夠使用接近255的數字,因爲信號數量不會那麼高。

除了那些常見的指導方針之外,還有很多嘗試去定義不同的數字應該是什麼意思:http://tldp.org/LDP/abs/html/exitcodes.html

所以你想從你的程序中返回一個任意的整數,最好把它打印到標準輸出中,並用你的bash腳本中的VALUE=$(program)來捕獲它。

+0

我相信範圍是0-255(即* uint8_t'範圍)在* NIX系統上 - 不熟悉任何最大值爲127的系統(這意味着一個帶符號的返回類型等同於「int8_t」,但這也意味着-128的下限)。 – 2010-09-17 09:31:30

+0

+1感謝您的解釋:) – Searock 2010-09-17 09:52:35

+0

除了告訴錯誤的範圍(如@Jonathan注意到的),您似乎也混淆了程序退出狀態(由'waitpid(2)'報告)和shell命令退出狀態由'$?'報道)。 「128-255用於信號」僅適用於後者。 – 2010-09-17 10:50:40

3

main的返回值(即應用程序的退出狀態)限制在* NIX的範圍[0,255]。 1000超出範圍,並且操作系統將其視爲0,據推測。

+2

不,至少在bash中,大於255的退出狀態返回模256的值。1000將返回232 – 2010-09-17 09:44:35

+0

這就是我所假設的,基於C如何處理數字,但OP說他得到了0作爲他的結果。 – 2010-09-17 10:52:55

1

在Unix-land中,main的返回值是有限的,因爲exit限制在8位字節的範圍內。

在Windows中,有一個值爲STILL_ACTIVE,值爲259,最好避免將其作爲進程退出代碼。

除此之外,在Windows中,您可以返回一個32位代碼,例如HRESULT,這是通常完成的。

相關問題