山水

山水

stdbool.h は通常、次のように定義されます。

#define false   0
#define true    1

(源泉:オープンBSDマスラー、等。 )

そしてUnixプログラムには、false次のように定義された失敗ステータスコードが1つしかありません。

int
main(int argc, char *argv[])
{
    return (1);
}

完全性のために、Unixプログラムの定義は次のtrueとおりです。

int
main(int argc, char *argv[])
{
    return (0);
}

明らかに、これはvalueの正反対ですfalse。明らかにstdbool.hにあります。私が使ったバージョンはオープンBSDcoreutilsにはより多くのバージョンがあるため言葉が多い

これらの違いが発生する歴史的な理由は何ですか?

ベストアンサー1

プログラムはさまざまな理由で失敗する可能性があります。たとえば、grep必要なパターンが見つからない場合、または指定されたファイルのいずれかを開くことができない場合は失敗します。

現在、Unixでは、子プロセスから親プロセスに1(符号なし)バイト値(リターンコード)を渡すことができます(どのシグナルが子プロセスを殺したか、コアが生成されたかなどに関する情報は無視しています。more詳細情報)少し後ろ)。

失敗する方法はさまざまであるため、これらのさまざまな障害をエンコードする複数の戻りコードと成功を示す1つの戻りコードを持つことが合理的です。

0)は成功を示す合理的な選択であり、残り(1-255)は失敗(および失敗の種類)を表します。

成功には17、失敗には0〜16、18〜255を使用することが完全に可能です。しかし、単純化のために成功には0、失敗には1〜255を選択します。したがって、範囲があります。成功の場合は255を使用し、失敗の場合は0〜254を使用することも同様に簡単です。ただし、これは将来の変更を8ビット以上のリターンに制限し、単一のエラーコードの範囲を単純に保ちます。

おすすめ記事