警告やエラーが発生した場合は、プログラム名を出力する必要がありますか?

警告やエラーが発生した場合は、プログラム名を出力する必要がありますか?

スクリプトまたはプログラムを作成する場合は、警告またはエラーメッセージとともにその名前をstderrに出力する必要がありますか?たとえば、

./script.sh: Warning! Variable "var" lowered down to 10.

または:

./prog.py: Error! No such file: "file.cfg".

私はそれが一般的に好みの問題であることを知っています(特にあなた自身のものを書いている場合)。しかし、これについて伝統的なものがあるかどうか疑問に思います。私はほとんどのUNIX / Linuxユーティリティが何かが起こったときに自分の名前を書くと思うので、これは良いことのように見えますが、それを行う方法と何もしない方法についてのガイダンスや暗黙のルールはありますか?

/usr/bin/たとえば、バイナリを下にインストールするのではなく、代わりに別の/usr/local/bin/場所にインストールすることをお勧めします。 stderrへの出力にも同様の規則はありますか?名前の後にコロンを付ける必要がありますか?それとも「警告!」という言葉しかありませんか?何も見つかりませんが、誰かが私がそれについて読むことができる場所を教えることができます。

この質問はプログラミング慣行に関するものですが、上記よりもここに適していると思います。スタックオーバーフロー一般的なプログラミングではなくUNIX/Linuxの伝統に関するものだからです。

ベストアンサー1

一般的なアプローチは保存することです。0番Cプログラムに引数を渡し、それをmain単純なプログラムの引数として使用します。perror

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *foo = malloc(9999999999L);
    if (foo == 0)
        perror(argv[0]);
    return 0;
}

プログラム"foo"を呼び出して実行すると、次のようになります。

> ./foo
./foo: Cannot allocate memory

複雑なプログラムをテキストに追加することはできますが(またはパスの代わりにファイル名を使用)、プログラム名を保持すると誤動作するプログラムのソースを見つけることができます。

エラーメッセージに一般的に許可されているスキームはありませんが、一般的に使用されているプログラムの中には、「gcc」などの「エラー」や「警告」などのメッセージカテゴリが追加されています。以下は私のビルドログの1つの例です。

compiling fld_def (obj_s)
../form/fld_def.c: In function '_nc_Copy_Argument':
../form/fld_def.c:164:14: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
        res = (TypeArgument *)argp;
              ^

この例では、gccはコロンを使用してフィールドを区切り、ファイル名、行番号、列番号の後、実際のメッセージの前に「警告」カテゴリを追加します。しかし、いくつかのバリエーションがあり、手順が複雑になります(例:viに似たEmacs)情報を解析します。

コンパイラの場合は、次を使用します。カテゴリーメッセージの内容は致命的なエラーを検出します。すぐに致命的)と警告。プログラムがエラーで終了しても、一部は実際の警告であり、一部はエラーという意味ではありません。ただし、動作が異なる場合(またはある程度動作している場合)、このカテゴリは発生した問題を診断するのに役立ちます。

おすすめ記事