これらの2つのプリプロセッサコードでは、その相違点と使用方法は何ですか?プリプロセッサディレクティブ#errorと#warningの相違点
#error "¡ERROR GRAVISIMO!"
#warning "ABC está obsoleto. Use XYZ en su lugar."
これらの2つのプリプロセッサコードでは、その相違点と使用方法は何ですか?プリプロセッサディレクティブ#errorと#warningの相違点
#error "¡ERROR GRAVISIMO!"
#warning "ABC está obsoleto. Use XYZ en su lugar."
#error
は、プログラムをコンパイルしないようにエラーを生成するために使用されます。 #warning
はコンパイラの警告を生成しますが、プログラムのコンパイルを維持しません。
エラー:
警告:最初のケースでのビルドは、ビルドに失敗した第2の場合であること
お知らせここであることを示す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
の使い方の例です。
これらはマクロではありません。そして指示の1つのみが標準Cです。ヒント:それは第2のものではありません。 – Olaf
コンパイラのドキュメントを読んでみませんか? [gcc](https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html)は、例えば次のように言っています: "ディレクティブ '#error'は、プリプロセッサに致命的エラーを報告させます... '#warning' '#error'と似ていますが、プリプロセッサに警告を出して前処理を続行させます。 – kaylum
[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) –