GNU/Linux >> Linux の 問題 >  >> Linux

assert() が失敗した場合、プログラムの終了コードは何ですか?

これは実装固有です。これを行うことができます:

int main()
{
    assert(0);
}

次に実行します:

./a.out
echo $?
<ブロック引用>

1 (<- または何でも)

これにより、少なくともセットアップに何を期待するかがわかります。 134 を取得しています GCC と g++ の両方を備えた 2 つの Linux ボックスで。


C99 (C11 では変更なし) 標準では、assert と規定されています。 abort を呼び出します そして abort スタッフは、リターン コードについて次のように述べています。

<ブロック引用>

関数呼び出し raise(SIGABRT) によって、処理系定義のステータスの不成功終了の形式がホスト環境に返されます。 .

こちらの C99 標準のセクション 7.2.1.1 (アサート) および 7.20.4.1 (アボート) に記載されています。

多くの UNIX システムは、128 とシグナル番号 (SIGABRT) を返します。 はシグナル番号 6) であるため、134 を取得する可能性があります。取得した内容が何であれ、C 実装によって文書化する必要があります。

たとえば、gcc についてはこちらを参照してください .呼び出し元の環境に何が返されるかについてはまったく沈黙していますが。ここの特定のセクションから:

<ブロック引用>

一部の選択は、ライブラリとオペレーティング システム (または独立した環境用にコンパイルする場合は他の環境) によって行われます。詳細については、ドキュメントを参照してください。

そしてこちら:

<ブロック引用>

これらのポイントのほとんどの動作は、C ライブラリの実装に依存しており、GCC 自体によって定義されていません。

glibc もそうです プログラムの終了時に doco here (具体的には終了ステータス ビット)。慣習について言及していますが、確固たる規則はありません。


Linux
  1. プロセスが終了したときのデフォルトの終了コード?

  2. コマンドCat/proc / cpuinfoを実行するとどうなりますか?

  3. シェルでファイルを実行するとどうなりますか?

  1. Sudoがカーネルを破壊するプログラムの場合、何が得られますか?

  2. Sigkillシグナルが送信された場合、プログラムは何をしますか?

  3. プログラムがctrl cで終了したときに関数を呼び出す

  1. Linux 環境変数値の最大サイズは?

  2. caddr_t の重要性と使用時期は?

  3. プログラムをアセンブリで作成する場合、この HelloWorld アセンブリ コードのどの部分が不可欠ですか?