C++调用C函数,为什么要加extern "C"?

来源:互联网 发布:http请求格式 json 编辑:程序博客网 时间:2024/06/05 16:41

C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。

比如函数:void fun(int x, char y)
C++有重载功能,所以编译后的函数名会变为__fun_int_char
而C语言没有重载,编译生成的函数名为__fun

要是没有加extern "c",C++连接器链接查找fun函数是就会按照__fun_int_char这个名字查找,自然会提示连接失败,找不到。而加上externa "c",就是告诉链接器要按照C语言规则去查找,这时链接器就会按照__fun查找,这样才会链接成功了

0 0
原创粉丝点击