本文主要是介绍在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C++语言是一种面向对象编程语言,支持函数重载,而C语言是面向过程的编程语言,不支持函数重载,所以函数被C++编译后在哭中的名字与C语言的不同,如果声明一个C语言函数float f(int a, char b),C++的编译器就会将这个名字变成像_f_int_char之类的东西以支持函数重载,然而C语言编译器的库一般不执行该转换,所以它的内部名为_f,这样连接器将无法解释C++对函数f()的调用。
C++提供了C语言Alternate likeage specifications(替换连接说明)符号extern "C"来解决名字匹配问题,extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在模块或其他模块中使用。extern后跟一个字符串来指定向声明的连接类型,后面是函数声明。
extern "C" float f(int a, char b);
该语句的目的是高速编译器f()是C连接的,这样C++就不会转换函数名。标准的连接类型执行符有“C”和“C++”两种,但编译器开发商也可以选择用同样的方法支持其他语言。如果有一组替代连接的声明,可以把它们放在花括号里:
extern "C" {
float f(int a, char b);
...//其他函数
}
extern "C" {
#include "Myheader.h"
...//其他C头文件
}
这就告诉C++编译器,函数f是C连接的,应该到库中找名字_f而不是找_f_int_char。C++编译器开发商已经对C标准库的头文件作了extern "C"处理,所以可以用#include直接引用这些头文件。
这篇关于在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!