web-dev-qa-db-ja.com

Cプリプロセッサでエラーまたは警告を生成するにはどうすればよいですか?

DEBUGモードでのみコンパイルする必要があるプログラムがあります。 (テスト目的)

プリプロセッサでRELEASEモードでのコンパイルを防ぐにはどうすればよいですか?

52
Eonil

どこにでも配置:

#ifndef DEBUG
#error Only Debug builds are supported
#endif
75
Hans Passant

Cは#errorステートメント、およびほとんどのコンパイラは#warningステートメント。 gccドキュメントが推奨 メッセージを引用します。

19
philant

より洗練されたものかもしれませんが、それは以前のソリューションのコピー&ペーストにすぎません。 :-)

#ifdef DEBUG        
    #pragma message ( "Debug configuration - OK" )
#Elif RELEASE   
    #error "Release configuration - WRONG"
#else
    #error "Unknown configuration - DEFINITELY WRONG"
#endif

追伸警告を生成する別の方法もあります。参照されていないラベルを作成します

HereIsMyWarning:

それを参照しないでください。コンパイル中に、次のような警告が表示されます

 1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label
11
Zdeno Pavlik

そのためにerrorディレクティブを使用できます。 DEBUGが定義されていない場合、次のコードはコンパイル時にエラーをスローします。

#ifndef DEBUG
#error This is an error message
#endif
4

単にエラーを報告したい場合:

#ifdef RELEASE
  #error Release mode not allowed
#endif

ほとんどのコンパイラで動作します。

3
anon

GCCおよびClang(およびおそらく_Pragma機能をサポートするすべてのコンパイラ)の場合、マクロを定義できます。

#if ! DEBUG
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error \"Must be fixed for release version\"")
#else
#define FIX_FOR_RELEASE(statement) statement
#endif

このマクロは一時的なハックに使用できます。たとえば、同僚がまだ書いていないコードを回避したり、ビルドを公開したいときに修正することを忘れないようにすることができます。どちらか

FIX_FOR_RELEASE()
// Code that must be removed or fixed before you can release

または

FIX_FOR_RELEASE(statement that must be removed or fixed before you can release);
1
gnasher729

Code :: Blocksでは、リリースモードが必要ない場合は、リリースモードを削除できます。これを行うには、[プロジェクト]メニューをクリックして[プロパティ...]を選択し、[ビルドターゲット]タブで[リリース]をクリックしてから[削除]ボタンをクリックします。リリースモードを削除すると、現在のプロジェクトに対してのみ実行されるため、他のプロジェクトでも使用できます。

それ以外の場合、プリプロセッサを本当に使用したい場合、これを行うことができます:

#ifdef RELEASE
#error "You have to use the Debug mode"
#endif
1
Donald Duck