診断メッセージの概要
診断メッセージの概要
メッセージが長い場合は、必要に応じて次の行に折り返されます。
コマンド行オプション(-pden)を使用すると、診断の数値識別子を診断メッセージ に含めるように要求できます。診断識別子が表示される場合、診断がコマンド行で 重大度を無効にすることができるかどうかも指示されます。重大度を無効にできる 場合、診断識別子には接尾部 -D(discretionary 自由裁量)が含まれます。無効にで きない場合、接尾部はありません。たとえば次のとおりです。
"Test_name.c",line 7: error #64-D: declaration does not declare anything
struct {};
^
"Test_name.c",line 9: error #77: this declaration has no storage class or type specifier
xxxxx;
^
エラーが自由裁量かどうかは特定のコンテキストに関連付けられたエラー重大度に 基づいて決まるので、同じエラーがある場合は自由裁量で、別の場合はそうでない こともあります。warning(警告)と remark(注釈)は、すべて自由裁量です。
一部のメッセージの場合、エンティティ(関数、ローカル変数、ソース・ファイル など)のリストが有効です。エンティティは、初期エラー・メッセージの後に表示 されます。
"test.c", line 4: error: more than one instance of overloaded function "f" matches the argument list:
function "f(int)"
function "f(float)"
argument types are: (double) f(1.5);
^
場合によっては、追加のコンテキスト情報が提供されます。特にコンテキスト情報 が便利なのは、フロント・エンドがテンプレートのインスタンス生成中、またはコ ンストラクタ、デストラクタ、代入演算子関数のいずれかを生成中に診断を発行す る場合です。たとえば次のとおりです。
診断メッセージの概要
2.6.1 診断の制御方法
コンパイラが提供する診断オプションを使用すると、パーサがコードを解釈する方 法を修正できます。これらのオプションを使って診断を制御できます。
-pdelnum エラー数の上限を num に設定します。任意の 10 進数値を指定できま
す。エラー数がこの指定値に達すると、コンパイラはコンパイルを中 止します(デフォルトは 100 です)。
-pden 診断の数値識別子を、そのテキストと一緒に表示します。診断抑止オ
プション(-pds、-pdse、-pdsr、-pdsw)に指定する引数を見つけるた めに、このオプションを使用します。
また、このオプションは診断が自由裁量であるかどうかも表示しま す。自由裁量の診断とは、重大度を無効にできる診断です。自由裁量 の診断には接尾部 -D が含まれ、自由裁量でない診断には接尾部があ りません 。詳細は、2.6 節「診断メッセージの概要」(2-32 ページ)
を参照してください。
-pdf 対応するソース・ファイルと同じ名前で拡張子が .err の診断情報ファ
イルを生成します。
-pdr 注釈(軽い警告)を発行します。注釈はデフォルトでは抑止されます。
-pds num num の識別する診断を抑止します。診断メッセージの数値識別子を判
別するには、別のコンパイルで最初に -pden オプションを指定してく ださい。その後、-pds num を使用して診断を抑止します。抑止できる のは自由裁量の診断だけです。
-pdse num num の識別する診断をエラーに分類します。診断メッセージの数値識
別子を判別するには、別のコンパイルで最初に -pden オプションを指 定してください。その後、-pds num を指定して診断をエラーに分類し 直します。変更できるのは、自由裁量の診断の重大度だけです。
-pdsr num num の識別する診断を注釈に分類します。診断メッセージの数値識別
子を判別するには、別のコンパイルで最初に -pden オプションを指定 してください。その後、-pdsrnum を指定して診断を注釈に分類し直し ます。変更できるのは、自由裁量の診断の重大度だけです。
-pdsw num num の識別する診断を警告に分類します。診断メッセージの数値識別
子を判別するには、別のコンパイルで最初に -pden オプションを指定 してください。その後、-pdswnum を指定して診断を警告に分類し直 します。変更できるのは、自由裁量の診断の重大度だけです。
診断メッセージの概要
2.6.2 診断抑止オプションの使用方法
次の例は、コンパイラが発行する診断メッセージの制御方法を示しています。
次のコード・セグメントを考えてみましょう。
int one();
int i;
int main() {
switch (i){
case 1:
return one ();
break;
default:
return 0;
break;
} }
-q オプションを指定して本コンパイラを起動すると、次のような結果になります。
"err.cpp", line 9: warning: statement is unreachable
"err.cpp", line 12: warning: statement is unreachable
フォールスルー状態を避けるために、各 case 文の終わりに break 文を入れることは 標準的なプログラミング方法なので、これらの警告は無視できます。-pden オプショ ンを指定すると、これらの警告の診断識別子を検出できます。結果は次のとおりで す。
[err.cpp]
"err.cpp", line 9: warning #111-D: statement is unreachable
"err.cpp", line 12: warning #111-D: statement is unreachable 次に、診断識別子 111 を -pdsr オプションの引数として指定すると、この警告を注釈 として扱うことができます。(注釈はデフォルトで抑止されるので)このコンパイル では、診断メッセージは生成されなくなります。
こうした診断メッセージの出力を制御することは便利ですが、常に危険を伴います。
コンパイラからは、問題に発展しそうな兆候を示すメッセージが出力されているこ
診断メッセージの概要
2.6.3 その他のメッセージ
ソースに関連していないその他のエラー・メッセージ(コマンド行の構文が正しく ない、指定されたファイルが見つからないなど)は通常、致命的エラーを示します。
メッセージの前には、文字列「>> WARNING:」または「>> ERROR:」のいずれかが 付いています。
たとえば次のとおりです。
cl2000 -v28 -j
>> WARNING: invalid option -j (ignored)
>> ERROR: no source files
クロスリファレンス・リスト情報の生成方法(-px オプション)