2015-03-25 60 views
1

任何人都可以请解决我下面的问题:如何在运行时在其定义重命名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(); 
} 

感谢

+3

你想通过这样做达到什么目的? C没有函数运行时名称的概念(除了作为调试符号)。 – 2015-03-25 05:25:02

+1

您不能使用任何编程语言重命名函数,变量,类......。在c中,一个名称提供了一个指向内存中的位置的指针,而且是静态的。此外,即使您能够更改其名称,您仍然可以在源代码中更改它的调用。 – 2015-03-25 05:29:17

+0

该程序不输出自己,所以你的“预期的输出如下”没有任何意义。 – hobbs 2015-03-25 05:29:42

回答

3

一种方法是有一个像

#define bar() bar_test() 

现在要求bar()由宏调用宏bar_test()

定义的函数应该是b按照标准进行呼叫。 在运行期间没有选择更改函数名称,也没有任何意义。

+0

其实,我在c单元测试框架(模拟函数)中遇到了问题。 如果在同一个文件中定义了两个函数,那么在链接器有机会包装它之前,汇编器会解析函数调用。 通过做上面的事情,我想使功能bar()未定义,以便链接器可以将它包装到__wrap_bar()函数。 – 2015-03-25 05:46:02

+0

非常感谢Gopi ...但是通过这种方式,函数名称bar()在调用时也会被改变,这是不需要的。这是foo()的定义,bar应该保持原样。 – 2015-03-25 05:52:50

+0

此问题是作为另一个问题的解决方案:http://stackoverflow.com/questions/29212963/how-to-overcome-from-the-limitation-of-mock-functions – 2015-03-26 08:57:33