C与CPP互相调用
0. 说明
- C++采用g++编译,C采用gcc编译。两者主要不同点是:C++编译考虑到函数重载,会将原函数“改名”(命名倾轧name mangling);而在C中不存在重载,函数名不会变动。
- g++和gcc可以兼容C++和C的编译方式,但是默认情况下g++采用C++编译方式;而gcc采用C的编译方式
- 注意:gcc编译C++文件时不会主动链接C++用到的库stdc++,需要手动指定链接选项
-lstdc++ __cplusplus宏定义会在编译cpp文件以及用C++的方式编译时被包含,因此用gcc编译.cpp文件或者g++编译.c、.cpp文件都会有这个宏- 之所以用条件判断,因为gcc不认识
extern "C",直接编译会报错
1. C++调用C
只需要声明时包含extern "C"即可。下面的代码中,func.h可以不动,在main.cpp调用时,直接extern "C" int func(int, int)也是可以的。只需要让编译器按照C的方式编译,不要改动函数名即可正确链接的函数符号。
1 | // func.h 不论.c还是.cpp文件调用,都不会出错 |
