私はこのようなことをやって以来、次のことがあなたの望むものでなければなりません。 MACROが定義されている場合は関数がインクルードされ、それ以外の場合は関数がnoopになり、コードがコンパイルされます。
#ifdef MACRO
#define MACRO_NAME(arg1, arg2, ...) [code to expand to]
#else
#define MACRO_NAME(arg1, arg2, ...) noop
#endif
更新: [OK]をので、私は少し疑問が少し間違ってました。
ほとんどの静的解析ツールは、特定の#defineをスキャンするように構成することができます たとえば、CPPCheckには次の引数を与えることができます。
-D<ID> Define preprocessor symbol. Unless --max-configs or
--force is used, Cppcheck will only check the given
configuration when -D is used.
Example: '-DDEBUG=1 -D__cplusplus'.
コードを2回スキャンして目標を達成することができます。 #defineをさらに追加すると、スキャンを追加する前に、これが最も優れていると言えます。
また、次のいくつかの設定をスキャンすることもできます。
-f, --force Force checking of all configurations in files. If used
together with '--max-configs=', the last option is the
one that is effective.
と
--max-configs=<limit>
Maximum number of configurations to check in a file
before skipping it. Default is '12'. If used together
with '--force', the last option is the one that is
effective.
我々は同じコードベースからすべてのWIN32、ポケットPCとWM5およびWM6のためのコードをビルドするが、静的なすべてのチェックをしていた、前の会社での動作のこのタイプを使用ビルド構成。しかし、最終的な結果として、すべてのビルドで非冗長コードが削除されました。
一貫した滞在とは何を意味しますか? PERFORMANCE_TESTを変更したときにコードを削除して、何を達成しようとしていますか? – JamesD
右のコードは削除されており、構文チェックもされていません。コードをコンパイルしたい(または少なくとも構文チェックした)が、実行されないようにしたい。かなり良い解決策です。 – Cookie
CPPCheckは、前処理チェックの前に静的解析が行われるため、特定の#defineをスキャンするように設定できるため、チェッカーに依存することもあります。 – JamesD