【发布时间】:2013-11-25 19:18:57
【问题描述】:
假设我有一个可以在 C 和 C++ 中工作的头文件。 这个头文件包含了一些程序必须定义的函数,例如:
EXPORTED void * STD_API GetSymbol(CProject * p, char * s);
我如何确保这些函数实际上是在某个地方定义的?即使项目实际编译没有,也是无效的,因为这些函数会在运行时被另一个模块查找(它要编译为模块/dll/dylib/whatever)。
我唯一能想到的就是在某处使用该定义,也许是在函数调用中。但是,这需要在 header 中实现一个函数,我们都知道这会导致多个定义。
在 C++ 中,您可能可以通过这样的 hack 逃脱:
#ifdef __cplusplus
static inline void _impcheck()
{
assert(0 && "_impcheck called.");
GetSymbol(NULL, NULL);
}
#endif
(因为内联修饰符允许多个定义)。但是c呢?
【问题讨论】:
标签: c++ c header implementation