背景
项目中经常遇到C++和C语言混编的情况,例如性能要求必须使用C语言实现功能,开发要求使用C++实现界面。这种情况下,会出现很多C++和C混编问题,下面就我自己的项目经验谈谈可能遇到的问题和解决方法,如果有误或不当之处还请海涵并请不吝指教。
问题及解决
原因
出现问题的根源主要包含以下两方面:
- C++和C使用不同的编译器,而编译器对变量和函数有不同的符号表示方法;
- C++是C的升级,对C有很多扩展,而这些扩展C不适用;
问题
变量和函数
C++和C有不同的编译器,二者对变量名有不同的符号表示,例如对函数
int add(int a, int b);
C编译器对以上两个函数编译的结果可能都是_add
,因而C无法函数重载,而C++编译器为了实现函数重载编译的结果可能是add@@XBJJJ@D add@@XCJJJ@D
因此C++调用C语言编译的函数或变量时无法找