这可能看起来像一个奇怪的问题,但我想知道是否有可能使用任何类型的黑客从另一个文件调用静态函数而不显式使用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++
答案 0 :(得分:4)
您可以使用函数指针来表示静态函数。
对于测试框架,请注意C中的一些现有测试框架使用该技巧强制您使用STATIC
而不是static
说明符,而STATIC
是一个宏定义的(由如果您处于测试模式或未指定正确的链接,则无框架或static
。