【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