3

簡単な質問..無効な入力でC/C ++プログラムを終了する「適切な」方法はありますか?これまでのところ、C / C ++での私のキャリアには、次のようなことが含まれています。

// C
#include <stdio.h>
int main(int argc, char **argv)
{
    if (argc != 3) {
        fprintf(stderr, "Error: Usage: %s [some param] [some param]\n", argv[0]);
        return 1;
    }

    /* rest of program */

    return 0;
}

C ++では、 andの代わりにまたはcerrの代わりになります。fprintf(srderr...)iostreamstdio.h

これはOK/許容できる方法ですか、それとも私が知らない標準がありますか?

ありがとう!

4

3 に答える 3

11

基本的な規則は、終了時にエラー状態を示すためにゼロ以外の値を返すことです。ゼロの戻り値は、プログラムが正常に終了したことを示すために使用されます。

ゼロ以外の値のリストを考え出し、それらを特定のエラー条件に関連付けて、終了値に基づいて特定のエラーを識別できるようにすることを妨げるものは何もありません。

たとえば、シェルプログラムがプログラムを実行している場合、終了値を調べることで適切なアクションを実行できます。stderrへのエラーメッセージは私たちにとって有用ですが、終了値はプログラムで使用でき、柔軟性を高めることができます。

通常、値0〜127は使用のために再切断され、残りはジョブのクラッシュと終了コードに従ってシステムに割り当てられます

于 2012-06-10T23:16:53.790 に答える
1

DOS .batファイルの世界では、正常に実行されたプログラムが0を返すのが慣例であり、これは%ERRORLEVEL%バッチファイルの値によってチェックされます。ゼロ以外の値は、問題が発生したことを示します。返される正確な値は実際にはプログラマー次第であり、どこかに文書化する必要があります。詳細はこちら

Unixは非常に似ていますが、これによるともう少し仕様があります

于 2012-06-10T23:24:07.103 に答える
1

exit()または、の代わりに関数を呼び出すこともできますreturn。これはmain内にあり、retrun expと同等exit(exp)です。exitの引数は、これと呼ばれるすべてのプロセスで使用できるため、プログラムの成功または失敗は、これをサブプロセスとして使用する別のプログラムでテストできます。従来、戻り値0は、すべてが正常であることを示します。ゼロ以外の値は通常、異常な状況を示します。

exit他の関数から呼び出すことができるという利点があります。

于 2012-06-11T04:51:47.043 に答える