为了使程序的一部分易于单元测试,我想让它采用一个函数表,该表可以指向操作系统原语(即报告我们可以提供一组剪贴板目标的函数)或测试版本。理想情况下,虽然我不希望在实时版本中使用函数表的开销,只是它借给代码的额外结构。所以我想用某种方式告诉编译器函数表永远不会改变,这样它就可以优化查找。像这样的东西(用于说明的简单实现):
#ifndef TEST
const
#endif
static struct {
void (*reportTargets)(size_t targetc, const char **targetv);
[...]
} interfaceToOutside
#ifndef TEST
= {
reportTargetsLive,
[...]
}
#endif
;
这可能会奏效吗?如果没有关于如何实现这一目标(或做得更好)的好建议?