しばらく私は以下のようなものを使ってデバッグを行ってきました。カスタムデバッグprintf実行時に使用
#ifdef DEBUG
# define Log(fmt, ...) printf(("[%s:%d] %s: " fmt "\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);
#else
# define Log(...)
#endif
これは正常に動作し、そのような私はg++ -DDEBUG=1
のようなものを使ってコンパイルするとき、私は私が期待するすべての印刷物を得ること。
クライアント側のコードを複雑にすることなく(または実際には全く変更せずに)、ビルド時間(たとえば./myprocess -d
)ではなくランタイムコマンドでこのデバッグを行うことができます。
「GLOBAL_LOGGING_ENABLED」などの場合は#define LOG(etc ...)を、その他の場合は{0}「 – lijie
Bingo」のように定義ガードを使用することをお勧めします。ファイルが複数の場所に含まれている場合、ブールが静的である必要があることだけです。ありがとう。 – Ternary
プログラムごとに1つのインスタンスが必要です。すべての.c/.cpp +中の一つの単一定義(暗黙的なexternリンケージ)。 '#define'と同じ場所に.hの' extern'を使った宣言。 .hで 'static 'と定義すると、各コンパイルユニットがコピーを受け取ることになります。グローバル変数のリンケージ指定子としての 'static'は「この変数をこのモジュールの外部にリンクしない」ことを意味します。明快に私の記事を編集しました。 – Kos