条款三十四:如何在同一个程序中结合C++和C
来源:互联网 发布:网络数据分析工具解析 编辑:程序博客网 时间:2024/06/14 09:31
条款三十四:如何在同一个程序中结合C++和C
这一条款说明一些当你希望在C++文件中使用C代码时需要注意的问题。
一、Name Mangling(名称重整)
在C语言中不支持重载而C++中支持重载,这就意味着即便你直接将你的C语言代码放入C++即便代码中出现了多个名称相同的方法也可能造成编译器并不报错和警告的情况的出现。而且C++编译器为了支持重载都会把函数名进行重整而,函数名称的重整可能给我们的程序带来一定的麻烦因此可以使用extern “C”来将函数声明为C特点的函数,要求编译器以C函数对待。
下面三种方式都可以,第三种更具移植性:
extern "C" void func(); extern "C" { void func_1(); void func_2(); } #ifdef __cplusplus extern "C"{ #endif void fun_1() void fun_2() #ifdef __cplusplus } #endif
二、Statics的初始化
这里涉及的问题是静态成员的初始化和构造函数的执行在main函数之前,但是我们一般以main函数为程序的执行入口有时我们可以这样做:
extern "C" int realMain(int argc, char** argv); int main(int argc, char** argv) { return realMain(argc, argv); }
但是这个问题并不是这么简单就能解决的,更多的工作可能需要你去做。
三、动态内存分配
C++中动态内存分配使用new销毁用delete,而C语言中动态内存分配用malloc销毁用free,这里只要注意对应关系就好,不要弄混。
四、数据结构的兼容
C++中的struct和C语言中的struct相比拥有同等的结构即便在C++中添加了非虚函数,这也不会影响内存布局因此二者之间进行交流几乎不影响兼容性。
简单的说是一下五条:
- 确定你的C++和C编译器产出兼容的目标文件;
- 将双方都使用函数声明extern “C”;
- 如果可能尽量在C++中撰写main;
- new申请的用delete删除,malloc申请的用free删除;
- 两个语言之间的数据结构的交流限制于C所能理解的范围。
0 0
- 条款三十四:如何在同一个程序中结合C++和C
- 15.如何在同一个程序中混合使用C++和C
- 在同一个程序中结合C++
- C语言如何在两个文件中访问同一个全局变量
- 在同一个项目中使用Swift 和 Objective-C
- 如何 在C 程序中嵌入Perl
- 如何在C++中调用C程序?
- 如何在C++中调用C程序?
- 如何在C++中调用C程序
- 如何在C++中调用C程序?
- 如何在C程序中处理汉字
- 如何在C++中调用C程序?
- 如何在C++中调用C程序?
- 如何在C++中调用C程序?
- 如何在C++中调用C程序?
- 如何在C++中调用C程序?
- 如何在C++中调用C程序?
- python程序和c程序的结合
- Android应用程序------精算达人
- 中断
- eclipse launching workspace太慢的解决方法
- 【Unity教程】游戏系统主线程控制--快速精确查找子物体
- 第5次作业
- 条款三十四:如何在同一个程序中结合C++和C
- 任务管理
- 在Spring Boot中输出REST资源
- 苹果手机网页上点击数字可能拨打电话的解决办法
- spring mvc:expected at least 1 bean which qualifies as autowire candidate for this depende
- “浅拷贝”与“深拷贝”
- java实现动态优先权算法
- 基于TINY4412的Andorid开发-------简单的LED灯控制
- kmalloc&vmalloc&malloc