一尘不染

C++中extern "C" 的作用是什么?

javascript

放入 C++ 代码到底有什么作用extern "C"

例如:

extern "C" {
   void foo();
}

阅读 153

收藏
2022-02-14

共1个答案

一尘不染

extern "C"使 C 中的函数名具有 C 链接(编译器不会破坏名称),以便客户端 C 代码可以使用仅包含函数声明的 C 兼容头文件链接到(使用)您的函数。您的函数定义包含在二进制格式(由您的 C 编译器编译)中,然后客户端 C 链接器将使用 C 名称链接到该格式。

由于 C 有函数名重载,而 C 没有,C 编译器不能只使用函数名作为链接的唯一 id,因此它通过添加有关参数的信息来破坏名称。AC 编译器不需要修改名称,因为您不能在 C 中重载函数名称。当您在 C 中声明函数具有extern "C"链接时,C 编译器不会将参数/参数类型信息添加到用于链接的名称中。

正如您所知,您可以extern "C"显式指定与每个单独的声明/定义的链接,或者使用块将一系列声明/定义分组以具有一定的链接:

extern "C" void foo(int);
extern "C"
{
   void g(char);
   int i;
}
2022-02-14