#define DEBUG 1

コンパイル時に、コンパイラにオプションを指定できる必要があります。たとえば、-DDEBUG で GCC を呼び出すことができます。 オプション。

この場合、以下を使用することをお勧めします:

#ifdef DEBUG
#endif

または:

#if defined(DEBUG)
#endif

これがあなたが今やっている方法ではない場合。プロジェクトのグローバル ヘッダー ファイルがないことに驚いています。次のようなもの:

#undef DEBUG
#define DEBUG 1

「debug.h」というファイルで。 C プログラムでは、#include "debug.h" を使用してこれを含めることができます。


Code Complete 2 の「Chapter 8:Defensive Programming」のセクション 6 で Steve McConnel が提案するようなことを試してみてください...これをコードに追加してください:

#ifdef DEBUG
#if (DEBUG > 0) && (DEBUG < 2)
printf("Debugging level 1");
#endif

#if (DEBUG > 1) && (DEBUG < 3)
printf("Debugging level 2");
#endif

#if (DEBUG > n-1) && (DEBUG < n)
printf("Debugging level n");
#endif
#endif

次に、コンパイル時にこのフラグを追加します (警告:これはコンパイラに依存する可能性があります):

-DDEBUG=m

または、他の人が提案しているように、これらの種類のものを定義するグローバル ヘッダーを用意してください。


問題への対応として、次のようにコンパイラを呼び出すこともできます:

cc -c -DDEBUG=1 

または

 cc -c -DDEBUG=0

ファイル内の「define DEBUG 1/0」を削除するか、次のように置き換える必要があります:

#ifndef DEBUG
#define DEBUG 0
#endif

これが私が使用しているものです (GCC 構文):

    <リ>

    次の内容でファイル debug.h を作成し、各 c ファイルに含めます:

    #ifdef DEBUG
    extern FILE *dbgf;
    #define D_MIN   0x00010000  // Minimum level
    #define D_MED   0x00020000  // Medium level
    #define D_MAX   0x00040000  // Maximum level 
    #define D_FLUSH 0x00080000  // Usefull by a program crash
    #define D_TRACE 0x00100000  
    #define D_1     0x00000001  
    ...
    
    #define D(msk, fmt, args...) if(msk & dbgmsk) { fprintf(dbgf, "%s:",__FUNCTION__); fprintf(dbgf, fmt, ## args ); if(msk & D_FLUSH) fflush(dbgf); }
    #define P(msk, fmt, args...) if(msk & dbgmsk) { fprintf(dbgf, fmt, ## args ); if(msk & D_FLUSH) fflush(dbgf); }
    
    #else
    #define D(msk, fmt, args...)
    #define P(msk, fmt, args...)
    #endif
    

dbgmsk は変数であり、グローバル (プログラム全体) またはローカル/静的にすることができ、最初に初期化する必要があります。プログラム全体または各モジュールに対していくつかのオプションを定義できます。これは、レベル変数を使用したバージョンよりも優れており、より柔軟です。

例:module1.c:

#include "debug.h"

static int dbgmsk;  // using local dbgmsk
module1_setdbg(int msk) { dbgmsk = msk; D(D_TRACE,"dbgmsk1=%x\n", dbgmsk); }

foo1() {  P(D_1, "foo1 function\n" ); 
  ....
}
foo2() {}
...

foo3.c

#include "debug.h"
extern int dbgmsk; // using global dbgmsk

元。メイン:

#include "debug.h"
FILE *dbgf;
int dbgmsk = 0; // this is the global dbgmsk

int main() { 
  dbgf = stderr; // or your logfile
  dbgmsk = D_MIN;
  module1_setdbg(D_MIN|D_MED|D_TRACE|D_1);
  ....
}

また、すべての dbgmsk 変数を、プログラムの開始時に読み取られる構成テキスト ファイルに格納しています。