Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

error(1)

名前

error - ソース行の右側へのコンパイラエラーメッセージの挿入

形式

error [-n] [-q] [-s] [-v] [-t suffixlist] [-I ignorefile] [filename]

説明

error は、コンパイラや言語プロセッサにより生成されたエラーメッセージを解析します。error は、従来の読みづらい省略形だらけのエラーメッセージを解析し、エラーメッセージとソースコードを同時に表示できるようにします。

error は、指定されたファイル (filename) または標準入力からエラーメッセージを読み取り、次の処理を行います。

  • 各エラーメッセージを生成した言語プロセッサを判別します。

  • エラー行を含むファイルの名前と行番号を判別します。

  • ソースファイル内でエラー行の直前にエラーメッセージを挿入します。

言語プロセッサや内容を特定できなかったエラーメッセージは、ファイルに挿入されず標準出力に送られます。error がソースファイルを処理するのは、すべての入力を読み込んだ後だけです。

error は、その標準入力がエラーメッセージの送信元とパイプを介して接続されている状態で実行するように設計されています。言語プロセッサの中には、エラーメッセージを独自の標準エラーファイルに格納するものも、標準出力に送信するものがあります。そのため、両方のエラーソースがまとめて error にパイプで連結されているべきです。たとえば、csh 構文を使用している場合、次のコマンドは、lint の実行時に make(1S) が実行するすべてのプログラムによって生成されたすべてのエラーメッセージを解析します。

example% make –s lint | & error –q –v

error は、as(1)cpp(1)ld(1)make(1S) などのコンパイラが生成したエラーメッセージを識別できます。Pascal 以外のすべての言語において、エラーメッセージは 1 行に制限されています。エラーメッセージの中には、複数のファイル内の複数の行を示すものもあります。この場合、error はエラーメッセージを複製し、該当するすべての場所にエラーメッセージを挿入します。

オプション

–n

ファイルを処理しません。すべてのエラーメッセージは標準出力に送られます。

–q

error はファイルを処理するかどうかを尋ねます。継続するには、質問に対して y または n で答えます。–q オプションを指定しない場合、すべての参照されるファイル (破棄されるエラーメッセージを参照するファイルを除く) が処理されます。

–s

エラーの分類に従った統計を出力します。

–v

すべてのファイルを処理した後で、処理したすべてのファイルを vi で開き、最初に処理したファイル内の最初のエラーの位置を示します。vi(1) が見つからない場合、ex(1) または ed(1) を標準の場所から実行しようとします。

–t suffixlist

後続の引数を接尾辞リストとして扱います。接尾辞リストに現れない接尾辞を持つファイルは処理されません。接尾辞リストはドットで区切られたリストで、* ワイルドカードも使用できます。たとえば、接尾辞リスト

.c.y.f*.h

を使用すると、error.c.y.f*.h で終了するファイルを処理します。

error は割り込みと終了を捕捉し、適切に終了します。

使用例 1 error コマンドの使用

次の C シェル (/usr/bin/csh) の例では、error は FORTRAN コンパイラから入力を受け取ります。

example% f77 –c any.f |& error options

K シェル (/usr/bin/ksh) を使用した場合の例は、次のとおりです。

example% f77 –c any.f 2>&1 | error options

使用法

error は、次の 6 つの分類基準に従ってエラーメッセージを処理します。

同期

言語プロセッサの中には、現在処理中のファイルを示す簡単なエラーメッセージを生成するものがあります。言語プロセッサが各エラーメッセージ中にファイル名を含めない場合、error はこのような簡単なエラーメッセージを使用してファイル名を判別します。このような同期メッセージは、error により完全に取り除かれます。

破棄

lint からのエラーメッセージの中で、2 つの lint ライブラリ、/usr/lib/lint/llib-lc/usr/lib/lint/llib-port のいずれかに関連するメッセージは破棄され、間違ってこれらのライブラリが処理されないようにします。このようなメッセージも error により完全に取り除かれます。

無視

lint からのエラーメッセージの中で、あまり大切でない診断メッセージを生成することがわかっている関数を示すメッセージは無視することができます。無視されたエラーメッセージはソースファイルには挿入されず、標準出力に書き込まれます。無視する関数名は、ユーザーのホームディレクトリにある .errorrc ファイル、または –I オプションで指定したファイルから取られます。このファイルが存在しない場合、エラーメッセージは無視されません。このファイルが存在するときは、無視する関数名はそのファイル内で 1 行に 1 つずつ記述されていなければなりません。

ファイル固有でない

判別できないエラーメッセージは 1 つのグループにまとめられ、ファイルが処理される前に標準出力に書き込まれます。このようなエラーメッセージは、ソースファイルには挿入されません。

ファイルに固有

特定のファイルは示されているが特定の行が示されていないエラーメッセージは、そのファイルが処理されるときに標準出力に書き込まれます。

本当のエラー

判別可能なエラーメッセージは、そのエラーメッセージが示すファイルに挿入される候補となります。

ソースファイルに挿入されるのは、本当のエラーメッセージだけです。他のエラーメッセージは、error により完全に取り除かれるか、標準出力に書き込まれます。error はソースファイル内で、エラーメッセージの行番号が示す行の前にエラーメッセージを挿入します。各エラーメッセージはその言語におけるコメントとなります。内部的には、エラーの先頭には文字列 ### が付けられ、エラーの終わりには文字列 %%% が付けられます。これにより、エディタで作業するとき、エラーを簡単に検出し削除できます。さらに、各エラーメッセージには、そのエラーメッセージが示す行の行番号が入っています。記述規則に則っとったソースプログラムであれば、エラーメッセージを削除しなくてもそのまま再コンパイルでき、エラーメッセージ自体が新たなエラーを引き起こすこともありません。C や Pascal のように記述規則を持たない言語で書かれた、記述の整っていないソースプログラムでは、コメントを別のコメント内に挿入することは可能ですが、新たにコンパイルするときに問題が発生する原因となります。これを回避するには、コメントの終わりと同じ行に言語文がないように、ソースプログラムの記述方法を変更します。

ファイル

~/.errorrc

lint のエラーメッセージで無視する関数名

/dev/tty

ユーザーのテレタイプ

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
developer/base-developer-utilities

関連項目

make(1S), as(1), cpp(1), csh(1), ed(1), ex(1), ld(1), vi(1), attributes(7)

バグ

tty デバイスは、ユーザー入力用に直接開いてください。

リンク付きのソースファイルは、リンクを 1 つだけ持つファイルのコピーを新たに作成します。

言語プロセッサのエラーメッセージの形式を変更すると、error がエラーメッセージを判別できなくなります。

error は純粋に機械的な処理を行うため、構文として重要でない 1 つのエラーによって発生した大量のエラーをフィルタすることはできません。このようなエラーは手動で破棄してください。

Pascal のエラーメッセージは実際にエラーが発生した行の後に置かれますが、error はメッセージを前に置きます。 '|' マークによるエラー箇所の指定も error のメッセージではずれてしまいます。

error は、ある程度高速な CRT で動作するように設計されています。低速の端末では使いづらく、ハードコピー端末で使用するようには設計されていません。