2014-01-21 111 views
4

我在C++中編譯了兩個簡單的程序,每個程序都做了細微的更改,並使用查詢echo $?輸出由main返回到操作系統的值。爲什麼返回的值不同?

程序1

int main() 
    { 
      return 0 ; 
    } 

計劃2

int main() 
    { 
     return -1 ; 
    } 

當我運行第一程序和做echo $?將該值作爲預期0,但是當我跑的第二程序和echo $?的值是255,而不是預期的-1。
這是爲什麼呢?
我使用的是Ubuntu 12.04 LTS,如果它很重要

+3

Linux僅使用來自'main()'的返回值的最低有效位8位,並將其視爲無符號數。 –

+1

@MichaelBurr:你應該把它作爲答案(我正要做)。 –

+0

[Linux/bash中程序返回值的有效範圍是多少?](http://stackoverflow.com/questions/8082953/what-is-the-valid-range-for-program-return-value -in-Linux的bash)的 –

回答

4

POSIX spec for exit()

的狀態的值可以是0,EXIT_SUCCESS EXIT_FAILURE,或任何其他值,儘管只有最低顯著8位(即,狀態& 0377)應提供給等待的父母程序。

和每個C標準:

從初始呼叫給主函數的返回相當於調用由主功能作爲它的參數返回的值的出射函數;

1

Linux只使用返回值的一個字節。在答案here中有一個非常好的,雖然有點冗長的解釋。檢查一個沒有標記爲答案的人。

相關問題