2016-06-07 35 views
2

看看下面的C++程序:爲什麼我的shell只能檢測0到255之間的返回碼?

#include <cstdlib> 
int main(){exit(-1);} 

當我在運行這個程序或者zshbash,或者sh,我得到如下結果:

$ ./test 
$ echo $? 
255 
$ 

如果我運行:

#include <cstdlib> 
int main(){exit(256);} 

它產生以下:

$ ./test 
$ echo $? 
0 
$ 

這是正常的外殼來解釋0之間的返回碼 - 255?
是否有可能產生超出此範圍的值?

+1

在Linux中,shell是正常的。應該可以通過創建自己的操作系統來產生超出此範圍的值。 – MikeCAT

+2

Linux通常只存儲來自返回值的低8位,並將返回狀態作爲包含返回值或信號編號的16位值進行通信。 –

+0

使得操作系統可能從返回代碼中獲得低位,這些都是零。 –

回答

5

C++允許您從main返回兩個值:EXIT_SUCCESSEXIT_FAILURE。返回EXIT_SUCCESS與返回0相同,具有與調用std::exit(0)相同的效果。

返回值以實現定義的方式傳遞迴操作系統,操作系統對該值所做的操作也是實現定義的。最後,從main返回任何其他值的語義也是實現定義的。

C++在這個問題上沒有什麼可說的。你需要諮詢你的平臺的文檔。

+2

從Open Group規範(Posix)http://pubs.opengroup.org/onlinepubs/009695399/functions/exit.html <<只有[exit()的狀態參數的最低有效8位可用到一個等待的父進程>> –

+0

請注意,存在'EXIT_SUCCESS'是因爲,可以想象,您可以在不使用'0'的平臺上運行,作爲成功進程的退出狀態。 'exit'實際上是兩種不同標準之間的接口,在這種情況下是C++和主機平臺。 – chepner

+2

@chepner - 提供'EXIT_SUCCESS'來爲'EXIT_FAILURE'提供一個並行結構。返回0與'EXIT_SUCCESS'具有相同的效果,並且無論OS返回碼的約定如何,都將正確運行;運行時系統會將0映射到任何合適的值。 –

相關問題