全站数据
8 4 2 0 5 8 1

在c++ 程序中调用被c编译器编译后的函数,为什么要加extern "c" 声明

财务信息视察 | 简单学习,快乐成才!         
问题更新日期:2024-10-22 02:01:13

问题描述

在c++ 程序中调用被c编译器编译后的函数,为什么要加extern "c" 声明希望能解答下
精选答案
最佳答案

总之,重点就是C++里面支持函数的重载,因此编译出来的.obj或者库文件里面,函数名会被加上和参数有关的签名,用来区分同样函数名参数不同的函数。然而C语言不支持重载,所以函数名里面没有这样的签名。

这样,当C语言的程序调用C++写成的库的时候,就会找不到函数。

比如,一个函数叫 void foo(int bar)之类的,可能会在c++编译成叫 foo_i之类的名字,而在c语言里面就会编译成foo,这样c语言的程序去找foo就会找不到,这样连接的时候会出错。

为了解决这个问题,引入了extrn

"c

"{},在这个的作用域之内,c++的函数名不会加上参数签名,和c语言的标准保持统一,就兼容c语言的程序了。