2017-02-14 5 views
-1

これらの2つのプリプロセッサコードでは、その相違点と使用方法は何ですか?プリプロセッサディレクティブ#errorと#warningの相違点

#error "¡ERROR GRAVISIMO!" 

#warning "ABC está obsoleto. Use XYZ en su lugar." 
+2

これらはマクロではありません。そして指示の1つのみが標準Cです。ヒント:それは第2のものではありません。 – Olaf

+6

コンパイラのドキュメントを読んでみませんか? [gcc](https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html)は、例えば次のように言っています: "ディレクティブ '#error'は、プリプロセッサに致命的エラーを報告させます... '#warning' '#error'と似ていますが、プリプロセッサに警告を出して前処理を続行させます。 – kaylum

+2

[google](https://www.google.com)という検索エンジンがあるのを忘れていたかもしれません。 **いくつかの努力を払い**、[標準](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)と[GNU CPP](https:// gcc.gnu.org/onlinedocs/cpp.pdf) –

答えて

0

#errorは、プログラムをコンパイルしないようにエラーを生成するために使用されます。 #warningはコンパイラの警告を生成しますが、プログラムのコンパイルを維持しません。

エラー:

enter image description here

警告:最初のケースでのビルドは、ビルドに失敗した第2の場合であること

enter image description here

お知らせここであることを示す2つのスクリーンショットです正常に終了しました。

#errorは、プログラムが特定の条件でコンパイルされないようにする場合に使用されます。通常、プログラムは正しく動作しないため、#warningが使用されます。なぜユーザーがその理由を知るのを助けたいのですか?

次の例では、プログラムをCモードではなくC++モードでコンパイルすると、エラーまたは警告が表示されます。 C++コンパイラは自動的にマクロ__cplusplusを作成します。

エラー:

#ifdef __cplusplus 
    #error This program isn't compatible with C++! 
#endif 

警告:

#ifdef __cplusplus 
    #warning You are compiling this as a C++ program, but it's recommended to compile it as a C program. 
#endif 

最初のコードはCをサポートしていないプログラムに使用され++および第二のコードがで奇妙な振る舞いを有することができるプログラムのために使用されていますC++をサポートしています。これらはもちろん、#error#warningの使い方の例です。