MST
星途 面试题库

面试题:C++中extern "C"在函数声明中的作用

在C++代码中,若有函数声明如下:extern "C" void func(int); 请详细说明这里extern "C"的作用,以及它会对函数的调用和链接产生怎样的影响。
41.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

extern "C" 的作用

  1. 指定函数的编译和链接约定:在C++中,函数的编译和链接遵循C++的命名修饰规则(name mangling),会在函数名中加入参数类型等信息,以实现函数重载。而extern "C"告诉编译器,其后声明的函数func要按照C语言的编译和链接约定进行处理,C语言没有函数重载,其函数名不会进行复杂的命名修饰。这样做主要是为了能够与C语言代码进行混合编程,因为C语言编译器对函数名的处理方式与C++不同。

对函数调用和链接的影响

  1. 函数调用:从调用者角度,如果是C++代码调用该函数,调用方式与普通C++函数调用类似,但由于函数按照C语言约定编译,编译器在生成调用代码时,会按照C语言的调用规范,如参数传递顺序、栈的管理等进行处理。如果是C代码调用该函数,由于函数遵循C语言编译和链接约定,C代码可以直接调用,无需特殊处理,就像调用普通C函数一样。
  2. 链接:在链接阶段,链接器会按照C语言的命名规则去寻找函数的定义。对于func函数,链接器不会在目标文件中寻找经过C++命名修饰的函数名,而是按照C语言的简单函数名(未修饰的)去匹配。这使得C++代码能够正确链接到用C语言编写的函数实现,或者让C代码能够链接到使用extern "C"声明的C++函数实现,解决了不同语言之间函数链接的兼容性问题。