c++ - 从外部调用静态 C 函数

标签 c++ c linux unit-testing gcc

这似乎是一个奇怪的问题,但我想知道是否有可能通过任何类型的 hack 从另一个文件调用静态函数而无需显式使用 extern 或类似的东西。也许通过直接调用函数的内存地址或其他方式。

基本上我想做的是创建一个测试框架,它可以通过指定函数、文件和函数参数来调用任何函数。

所以像这样的结构:

component/
    component.c
         static int foo(int a){return a/2;}
         int bar(){ return 4;}

unit_tests/
    main.c
        int val = component.c::foo(4) * bar();

如果我可以在运行时通过注入(inject)函数的内存地址或其他东西来执行此操作,那就更好了。不过,我不完全确定这是否可以在 Linux 上执行,或者我是否会遇到安全问题。

也许与此类似,并且在我的组件进程中有一段代码来解释运行时调用并转换为正确的函数地址:Calling a function through its address in memory in c / c++

最佳答案

您可以使用指向静态函数的函数指针。

对于测试框架,请注意一些现有的 C 测试框架使用技巧来强制您使用 STATIC 而不是 static 说明符和 STATIC 是一个(由框架)定义为空或 static 的宏,如果您处于测试模式或未指定正确的链接。

关于c++ - 从外部调用静态 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30200951/

相关文章:

c - gcc 函数参数在堆栈帧上的对齐方式

c - 最小化 malloc() 调用量可以提高性能吗?

linux - 项目错误QT

linux - 在 shell 脚本中拆分并重命名拆分的文件

c++ - clang-format:类声明结束和命名空间关闭之间的空行

C++ For 循环遍历结构 vector (包含更多结构 vector )

c++ - 可以定义一个 C++ 变量来接受任何双向迭代器吗?

c++ - Buck中常见的平台名称有哪些?

c - 重新分配数组索引

java - 如何通过Java获取linux上电脑的ip?