Makefileの次の3つの変数(CFLAGS、CPPFLAGS、およびCXXFLAGS )に-DNDEBUGを追加して、NDEBUGを定義できます。これは、#defineNDEBUGを追加するのと同じです
他のバリエーションもあります:
-DNBDEBUG=1
と同等です
#define NDEBUG 1
そして、なぜ誰かが#ifdefの代わりに#ifndefを使用するのかという質問に答えるのは、元のコードへの変更が非常に明確に強調されているためです。
たとえば、次のコードを元のバージョンと見なします。
int a = 123;
int b = 346;
int c = a + b;
そして、代わりに乗算するマクロDO_MULTを追加する必要があります。これを行うには2つの方法があります。
最初のバリエーション:
int a = 123;
int b = 346;
#ifdef DO_MULT
int c = a *b;
#else
int c = a + b;
#endif
2番目のバリエーション:
int a = 123;
int b = 346;
#ifndef DO_MULT
int c = a + b;
#else
int c = a *b;
#endif
difftoolsを使用して変更を確認する場合、2番目のバリエーションは最初のバリエーションと比較してdiffをより明確に表示します。
#ifndefを使用するもう1つの理由は、CATCH-ALL-EXCEPTシナリオで何かを行うためです。