Skip to content
Tiantan
Articles

-1を返すときにエラー255が発生するのはなぜですか

On 2月 17, 2021 by admin

C ++プログラミングは初めてで、非常に基本的な質問があります。 C ++プログラムで-1を返し、終了ステータスを確認すると、255が返されます。それはなぜですか?

コードは最も基本的です:

int main() { return -1; } 

次に、コンパイルされたコードを実行した後:

echo $? 255 

回答

UNIX / POSIXでは、プログラムの終了コードは次のように定義されているためです。符号なし8ビット値。 -1を符号なし8ビットに変換すると255になります。

編集して追加:

詳細:UNIXのシステムコールのwait *()ファミリは、の結果をエンコードします。単一の32ビット整数に処理します。その結果の32ビットはさらに分割され、プロセスがコアをダンプしたか、シグナルが原因で終了したか(およびどれが)などの情報を提供します。その32ビットのうち、8つだけがプロセスの終了コード用に予約されていますこれらは符号なしの値として解釈されます。

UNIX / POSIXのfork / exec / waitモデルは、非常に古く、最も深く埋め込まれた機能の1つです。今日、新しいオペレーティングシステムを設計している場合は、別のことを行う可能性があります(少なくとも64ビットを使用します:-))。

一方、実際には、255を超える終了コードがあると本当に便利ですか。疑わしい。より強力なものが本当に必要な場合は、より広い範囲の数値の終了コードではなく、「終了文字列」に切り替えることをお勧めします。

コメント

  • いい編集。追加情報をありがとうございます。

回答

bash終了ステータス

のdiv>マニュアルページ実行されたコマンドの終了ステータスは、waitpidシステムコールまたは同等の関数によって返される値です。終了ステータスは0から255の間にありますが、以下で説明するように、シェルは125を超える値を特別に使用する場合があります。シェルビルトインおよび複合コマンドの終了ステータスもこの範囲に制限されます。特定の状況下では、シェルは特定の障害モードを示すために特別な値を使用します。

その範囲に制限されているので、実際にはあなたはそうです。

waitpid (2)のマニュアルページから:

WEXITSTATUS(status)

子の終了ステータスを返します。これは、exit(3)または_exit(の呼び出しで子が指定したステータス引数の最下位8ビットで構成されます。 2)またはmain()のreturnステートメントの引数として。このマクロは、WIFEXITEDがtrueを返した場合にのみ使用する必要があります。

Written by admin

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最近の投稿

  • 共振ダイポールを備えたバランの使用
  • “できない”と“できない? [重複]
  • JFKでは国内線のエアサイドターミナル間を移動できますか?
  • “深く感謝します”または“深く感謝します”
  • '抽象的なアイデア'とはどういう意味ですか? [クローズ]

アーカイブ

  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top