将extern "C"
放入C++代码到底能做什么?
例如:
extern "C" {
void foo();
}
最佳答案
extern "C"
使C++中的函数名称具有C链接(编译器不会更改名称),以便客户端C代码可以使用仅包含函数声明的C兼容头文件链接到(使用)函数。函数定义以二进制格式(由C++编译器编译)包含,客户端C链接程序随后将使用C名称链接到该二进制文件。
由于C++具有函数名的重载,而C没有,因此C++编译器不能仅使用函数名作为链接的唯一ID,因此它通过添加有关参数的信息来破坏名称。 C编译器不需要处理名称,因为您不能在C中重载函数名称。当您声明函数在C++中具有extern "C"
链接时,C++编译器不会在用于链接的名称中添加参数/参数类型信息。
众所周知,您可以显式地为每个单独的声明/定义指定extern "C"
链接,或使用一个块将一组声明/定义的组进行分组以具有一定的链接:
extern "C" void foo(int);
extern "C"
{
void g(char);
int i;
}
如果您关心技术方面的问题,它们会在C++ 03标准的7.5节中列出,此处是一个简短的摘要(重点是extern "C"
):extern "C"
是链接规范extern "C"
extern "C"
强制函数具有外部链接(不能使其静态)static
中的See Richard's comment: extern "C"
有效;这样声明的实体具有内部链接,因此没有语言链接关于c++ - extern “C”在C++中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60450816/