0

#error ディレクティブを使用してコンパイル中にエラーをスローし、ボード上に存在するチップ タイプをチェックするコードがあります。実行すると、以下のような出力が得られます。

errorchk.c:9:2: error: #error "I can't run"

次のようなエラーが表示されることを期待していました。

errorchk.c:9: error: "I can't run"

以下に示すように、9 行目のエラー (存在する場合) が何であるかを理解できません。

#include "stdio.h"
#define X 2
void main()
{
  int x=6;
    if(x>5)
    {
#if X>1
#error "I can't run"
#endif
    }
}

stdout のメッセージが期待どおりかどうかを明確にしてもらえますか? 基本的に、「#error」はエラー文字列に出力されるはずですか?

4

4 に答える 4

4

C 標準では、コンパイラが何を出力するかを正確に指定しているわけではなく、後のトークンを#error出力に含める必要があるだけです。得られる出力は「適合」です。コンパイラが異なれば、できることも異なります。

たとえば、clang形式は異なりますが、準拠しています。

$ cat t.c
#error hello
$ clang -c t.c
t.c:1:2: error: hello
#error hello
 ^
1 error generated.

エラーは、追加のコンテキストとともに、必要に応じて出力されます。

参照: C11 ドラフト、§6.10.5エラー ディレクティブ

フォームの前処理ディレクティブ

# error pp-tokensopt new-line

指定された一連の前処理トークンを含む診断メッセージを実装が生成するようにします。

于 2013-09-14T08:31:00.000 に答える
1

I would suggest that it is a useful part of the diagnostic to know that it is a message thrown by a #error directive rather than a built-in compiler message. Either way the actual format of compiler diagnostics of any kind is not mandated by the language standard.

于 2013-09-14T13:11:32.837 に答える