c++ - 强制执行/定义函数声明

标签 c++ c header implementation

假设我有一个可以在 C 和 C++ 中工作的 header 。 这个头文件包含一些程序必须定义的函数,例如:

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也有staticinline

其次,怎么样...

  1. 记录功能将由用户实现?

  2. 在运行时检查函数的可用性并在找不到函数时报告错误/抛出异常? dlsym()(我假设您正在使用 dlopen() API,是这样吗?)当找不到符号时将返回空指针。

  3. 如果您真的想要链接时失败,那么您可以尝试使用函数(调用它们,或者将它们的名称分配给 volatile 函数指针,如果你不希望过早地执行副作用等)

关于c++ - 强制执行/定义函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201379/

相关文章:

使用 header 在浏览器中显示 pdf 时,php 文件运行两次

c++ - 找到系统的行终止符

c++ - vector 的内容不会打印

c++ - Pre Z 缓冲区通过 OpenGL?

c - 为什么 char *T = "hello";不给内存泄漏?

c - 如何从 C 中的 Unix 终端获取输入文件名?

C++ : Best place to include header files

c++ - 成员函数与具有对象引用的静态函数

c++ - 合并链表时输出错误

c - 如何获取结构转储中字段的相对地址。 [C]