> 技术文档 > 【C++基础】面试高频考点解析:extern “C“ 的链接陷阱与真题实战

【C++基础】面试高频考点解析:extern “C“ 的链接陷阱与真题实战


名称修饰(Name Mangling)是C++为支持重载付出的代价,而extern \"C\"则是跨越语言边界的桥梁——但桥上的陷阱比桥本身更值得警惕

一、extern \"C\" 的核心概念与高频考点

1.1 链接规范与名字改编机制

C++ 为支持函数重载,会对函数名进行名字改编(Name Mangling)。例如:

void foo(int a, int b); // C++编译后可能变为_foo_int_int

而 C 语言不支持重载,函数名直接使用原始名称(如_foo)。当 C++ 调用 C 函数时,若未声明extern \"C\",链接器会因符号名不匹配报错。

关键考点

  • C++ 编译器如何处理函数名?(名字改编)
  • C 语言与 C++ 链接规范的差异
  • extern \"C\"的作用:强制按 C 语言方式编译声明

1.2 混合编译的典型场景

场景 1:C++ 调用 C 库

// 正确用法:在C++中声明C函数extern \"C\" { #in