【问题标题】:Calling static C functions externally从外部调用静态 C 函数
【发布时间】:2015-05-12 20:37:28
【问题描述】:

这似乎是一个奇怪的问题,但我想知道是否可以通过任何形式的 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();

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

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

【问题讨论】:

  • 不——你不能推断出 c++ 语法,除非你知道如何解析它(或有工具这样做)
  • 您应该记住,“静态”修饰符的目的是使函数对任何其他文件“不可见”。为什么要覆盖该功能?
  • 专门用于测试框架,无需将每个函数公开为接口。

标签: c++ c linux unit-testing gcc


【解决方案1】:

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

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

【讨论】:

  • 是的,我几乎希望它在运行时直接在内存中执行,或者实际上是什么。例如让脚本语言直接调用给定内存地址的函数。如果可能的话,我也宁愿不必为静态使用宏,因为根据我们的编码标准,我不确定这是否可以接受。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多