プログラムのセクションを単体テストしやすくするために、オペレーティング システムのプリミティブ (つまり、クリップボード ターゲットのセットを提供できることを報告する関数) を指すことができる関数のテーブルを取るようにしたいと思います。テスト版。理想的には、ライブ バージョンに関数テーブルのオーバーヘッドを持たせたくありませんが、それがコードに役立つ追加の構造だけです。したがって、ルックアップを最適化できるように、関数テーブルが変更されないことをコンパイラに伝える何らかの方法が必要です。このようなもの(説明のための単純な実装):
#ifndef TEST
const
#endif
static struct {
void (*reportTargets)(size_t targetc, const char **targetv);
[...]
} interfaceToOutside
#ifndef TEST
= {
reportTargetsLive,
[...]
}
#endif
;
これはトリックを行う可能性が高いですか、これを達成する方法についての良い提案がない場合 (またはそれを改善する方法) はありますか?