どうしたの:
#warning "Come back and implement this"
#warning "Do not do that!"
#warning "Must fix this before release"
通常、コンパイラは#warning
、エラーまたは警告メッセージに引数 (または後のマテリアル) を含めます。
そして、通常、コンパイラが警告を必要とする何かを検出すると、それをかなり明確に報告します。
要件を考えると、これに対処する唯一の方法は#warning
ディレクティブを保護することだと思います...
#ifdef DO_WARNINGS
#warning "Some warning"
#endif /* DO_WARNINGS */
-DDO_WARNINGS
ほとんどの場合、 ;なしでコンパイルします。#warning
警告を確認する必要がある場合( を使用-Werror
)、-DDO_WARNINGS
コンパイルが失敗することを受け入れて、結局含めます。make -k
個々のコンパイルエラーが存在する場合でも、可能な限り多くのことを行うことを忘れないでください.
GCC 4.4.1 マニュアルのセクション 5.52.9 には次のように書かれています (一部):
5.52.9 診断プラグマ
GCC を使用すると、ユーザーは特定の種類の診断を選択的に有効または無効にしたり、診断の種類を変更したりできます。たとえば、プロジェクトのポリシーでは、すべてのソースを「-Werror」でコンパイルする必要がある場合がありますが、特定の種類の警告を許可する例外が特定のファイルにある場合があります。または、プロジェクトで診断を選択的に有効にし、定義されているプリプロセッサ マクロに応じてそれらをエラーとして扱う場合もあります。
#pragma GCC diagnostic kind option
診断の処置を変更します。すべての診断が変更できるわけではないことに注意してください。現時点では、警告 (通常は '-W...' で制御) のみを制御でき、すべてを制御できるわけではありません。'-fdiagnostics-show-option' を使用して、制御可能な診断とそれらを制御するオプションを決定します。kind は、この診断をエラーとして扱う場合は 'error'、('-Werror' が有効な場合でも) 警告として扱う場合は 'warning'、診断を無視する場合は 'ignored' です。option は、コマンド ライン オプションと一致する二重引用符で囲まれた文字列です。
#pragma GCC diagnostic warning "-Wformat"
#pragma GCC diagnostic error "-Wformat"
#pragma GCC diagnostic ignored "-Wformat"
これらのプラグマは、コマンド ライン オプションをオーバーライドすることに注意してください。また、これらのプラグマをソース内の任意の場所に配置することは構文的に有効ですが、サポートされている唯一の場所は、データまたは関数が定義される前です。そうしないと、オプティマイザーがソースを管理する方法によっては、予測できない結果になる可能性があります。同じオプションが複数回リストされている場合は、最後に指定されたオプションが有効になります。このプラグマは、コマンド ライン オプションを汎用的に置き換えることを意図したものではなく、プロジェクト ポリシーを厳密に制御するためのものです。
GCC は、コンパイル中にメッセージを出力するための単純なメカニズムも提供します。
#pragma message string
コンパイル時に文字列をコンパイラ メッセージとして出力します。このメッセージは情報提供のみを目的としており、コンパイルの警告でもエラーでもありません。
#pragma message "Compiling " __FILE__ "..."
文字列は括弧で囲むことができ、位置情報とともに出力されます。
#warning
行を行に編集する気があるかどうかはわかりません#pragma message
。それは問題を回避するでしょう-そして、より少ないコンパイラーでサポートされる可能性のある#warning
inの周りに条件付きコンパイルを追加するよりも悪いだけです。#pragma message
移植性の要件が何であるかによって異なります。