解決策がインターネットでかなり検索された後、私の解決策が良いかどうかここで尋ねることにしました。MACROSを使用して機能を無効にする
私はシンプルでモジュラーなCロギングライブラリを作成しようとしています。これは、簡単に無効にし、博士課程の学生や研究者がロギングシステムの影響を可能な限り減らすアルゴリズムをデバッグするのを助けます。
私の問題は、私はロガーのコストは、Cのコードは次のようになります0
である実行可能ファイルを生成するコンパイル時にロギングシステムを無効にするには、ライブラリのユーザのために可能にしたいということです:
これは単にロガーを初期化します。私はassert.hヘッダーをチェックしているが、私の場合はsoulutionの結果が警告のリストになるサンプルコードを探しています。実際、logger_init()がマクロを使って0に置き換えられた場合、変数loggerは決して使用されません。
int logger_init(logger_t *logger);
#ifndef NLOG /* NLOG not defined -> enable logging */
int logger_init(logger_t *logger) {
...
}
#else /* NLOG defined --> the logging system must be disabled */
#define logger_init(logger) (int)((logger = NULL) == NULL)
#endif /* NLOG */
これは警告にはならないと私はまた、関数を呼び出しのオーバーヘッドを避ける:私はこの方法を使用することにしました。このため
。実際には私の最初の試みはこのようにすることでした:
私はそれを必要としなくても機能を呼び出し続けます。
私の解決策は良い解決策と考えることができると思いますか?より良い解決策はありますか?
ありがとう、みんな! 乾杯、 アルマンド
空の関数はジョブを実行し、コンパイラはそれらをインライン化してから削除します。 – paulm