2009-02-07 59 views

回答

23

你不能。它内置于编译器中,可以让你重载函数,并在不同的类和类似的东西中使用同名的函数。但是你可以编写像C函数一样的函数。这些可以从C代码中调用。但是,这些不能超载,不能由“正常” C++函数指针调用:

extern "C" void foo() { 

} 

上述功能将像C函数编译器被截断。这可能根本不包括名称的变化,或者一些变化,比如前面的“_”。

+0

只是次要NIT:这样的功能当然可以选自C被称为++函数指针:外部的 “C” 空隙FOO(){printf的( “富\ n”); } int main(){ void(* f)(); f = foo; f(); } – 2009-02-07 23:03:43

6

其他方式:

控制名称中使用的汇编代码gcc spec.

您可以指定名称在汇编代码可用于C函数或可变的写作声明者之后的asm(或__asm__)关键字。您应该确保您选择的汇编程序名称不与任何其他汇编程序符号或引用寄存器冲突。

为函数指定的汇编名,写出它的定义之前的函数的声明,并把ASM那里,就像这样:

int func() asm ("MYFUNC"); 

int func() 
{ 

g++将编译并nm -D输出将

0000000000001e02 T MYFUNC 

,而不是

0000000000001e02 T _Z4funcv 

测试对于g ++ 4.9.2