1

重複の可能性:
Linux/bash でのプログラムの戻り値の有効な範囲は?

以下は単純な c プログラムです。

#include <stdio.h>
int main(){
    int a=0, b=100;
    while(a<=b){
        printf("%d\n",a);
        a+=10;
    }
   return a;
}

Linux で戻り値を確認すると 110 が返されます。これは、プログラムで評価される最後の式が a に 110 を代入するためです。しかし、b=100 を 256 より大きい値に置き換えると、b=260 となります。戻り値は 14 であり、予想された 270 ではありません。main が 256 をはるかに超える範囲の整数を返すことになっているのに、戻り値が 256 にラップするのはなぜですか?

4

3 に答える 3

4

残念ながら、Unix ベースのシステムではそうです。main戻り値の型を として指定しても、255 を超える値を返すことはできませんintここを読んでください。

Windows は、終了コードとして 32 ビットの符号付き整数を使用するという意味で、より寛容です。

また、戻り値が常に最後に評価された式の値であると仮定することはできません。明示的なステートメントがない場合return、戻り値がどのように推測されるかはアーキテクチャに依存します。たとえば、ARM システムR0では(またはR0+R1場合によっては) レジスタ内の値であり、x86システム上ではEAXレジスタです。

于 2012-06-04T08:54:36.470 に答える
3

戻り値の型を指定していないだけでなく、return ステートメントもありません。何も返さないため、関数が終了したときに関連するレジスタ/メモリの場所にあったものは何でも、プログラムが返すものは完全にランダムです。

于 2012-06-04T08:52:22.217 に答える
1

POSIXページから:

ステータスの値は、0、EXIT_SUCCESS、EXIT_FAILURE、[CX]、またはその他の値ですが、待機中の親プロセスで使用できるのは最下位8ビット(つまり、ステータス&0377)のみです。

http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html

于 2012-06-04T09:03:17.987 に答える