如何在运行时在其定义重命名C函数名
任何人都可以请解决我下面的问题:如何在运行时在其定义重命名C函数名
问题:假设有定义为
void bar()
{
printf("bar\n");
}
void foo()
{
printf("foo\n");
bar();
}
所以两个功能foo()
和bar()
,在这里我想将它的定义中的函数名称栏更改为bar_test,而不是调用它。这应该是运行时,不应修改源代码。
预期的输出结果如下:
void bar_test()
{
printf("bar\n");
}
void foo()
{
printf("foo\n");
bar();
}
感谢
一种方法是有一个像
#define bar() bar_test()
现在要求bar()
由宏调用宏bar_test()
定义的函数应该是b按照标准进行呼叫。 在运行期间没有选择更改函数名称,也没有任何意义。
其实,我在c单元测试框架(模拟函数)中遇到了问题。 如果在同一个文件中定义了两个函数,那么在链接器有机会包装它之前,汇编器会解析函数调用。 通过做上面的事情,我想使功能bar()未定义,以便链接器可以将它包装到__wrap_bar()函数。 – 2015-03-25 05:46:02
非常感谢Gopi ...但是通过这种方式,函数名称bar()在调用时也会被改变,这是不需要的。这是foo()的定义,bar应该保持原样。 – 2015-03-25 05:52:50
此问题是作为另一个问题的解决方案:http://*.com/questions/29212963/how-to-overcome-from-the-limitation-of-mock-functions – 2015-03-26 08:57:33
你想通过这样做达到什么目的? C没有函数运行时名称的概念(除了作为调试符号)。 – 2015-03-25 05:25:02
您不能使用任何编程语言重命名函数,变量,类......。在c中,一个名称提供了一个指向内存中的位置的指针,而且是静态的。此外,即使您能够更改其名称,您仍然可以在源代码中更改它的调用。 – 2015-03-25 05:29:17
该程序不输出自己,所以你的“预期的输出如下”没有任何意义。 – hobbs 2015-03-25 05:29:42