2

デバッグ モードの場合は DLL 名前空間関数にアクセスし、リリース モードの場合はコメントアウトしたいコードがあります。

#ifdef DEBUG
       #define (DEBUG_CODE)  abcd::
#else
       #define   (DEBUG_CODE)  <Condition to skip processing>


       if (some condition)
              (DEBUG_CODE) func_name();

コメントを定義したいの#elseですが、コード処理や前処理が実行される前にコンパイラによってスキップされるため、それはできないと思います..

それが正しければ、 の処理を​​スキップする方法を教えてください(DEBUG_CODE) func_name();。それが使われている場所はたくさんありますが、どこにでも追加したくはありませんif(DEBUG)

編集

名前空間 DLL には、何も返さない関数と、値を返すことが期待され、enum.

すなわち

 abcd::func_name();
and
  int rs = abcd::func_name_2();
and
  enum  XYZ{ var1 = 0; var2};
  XYZ PQR  = abcd::func_name3();  //This Enum will prevent me from defining some kind
                                  // 0; as a `#define`

だから..複数のシナリオ..

ご協力いただきありがとうございます。

4

1 に答える 1

2

DEBUG_CODEに変更すると、これを行うことができます

    #ifdef DEBUG
    #  define DEBUG_CODE(code) abcd::code;
    #else
    #  define DEBUG_CODE(code) ;
    #endif

次に、次のように呼び出します。

    if(some_condition) DEBUG_CODE(func_name())

デバッグ モードでは関数が呼び出され、リリース モードではコードは生成されません。

これらの関数の戻り値を変数に割り当てるか、それらから返すことができるようにしたい場合(コメントで説明しているように、それは良い考えではないと思いますが)、デバッグで何を呼び出すかをマクロに持たせますモードとリリースモードで使用するもの。

    #ifdef DEBUG
    #  define IF_DEBUG_ELSE(debug_code, release_code) abcd::debug_code
    #else
    #  define IF_DEBUG_ELSE(debug_code, release_code) release_code
    #endif

これにより、少なくともマクロを呼び出すときに何が起こっているのかが明確になります。
これは次のように使用できます。

    return IF_DEBUG_ELSE(check_result(), 0);//0 for success
    if(IF_DEBUG_ELSE(check_condition(), true)){}
    XYZ xyz = IF_DEBUG_ELSE(get_xyz(), First_XYZ);

などなど。

于 2013-10-03T13:40:46.403 に答える