c函数:void myfunc(){},被编译成函数myfunc
c++函数:void myfunc(){},被编译成函数_z6myfunc
问题:如果在c++中调用一个使用c语言编写模块中的某个函数,那么c++是根据c++的名称修饰方式来查找并链接这个函数,那么就会发生错误,以上例,c++调用myfunc(),在链接阶段会去查找_z6myfunc,结果找不到。
解决方案:在c语言中的头文件.h中利用extern "C"{}将c语言写的所有函数括起来,还需要判断是否是c++编译器,加了个#if***#endif
在.h文件中
#if _ _cplusplus
extern "C"{
#endif
void func1();
void func2();
...//c语言某.c文件中所有的函数声明
#if _ _cplusplus
}
#endif
在ubuntu:
main.cpp fun.c fun.h
混合编程步骤:
gcc -c fun.c -o fun.o
g++ main.cpp fun.o -o main