C++和C的源码混合使用需要了解的事
2013-01-18 19:01
344 查看
你需要掌握C和C++的语法。
如果你有个c的可用源码,尽量不要去修改它,而是建个.h来输出声明,在外边的源码文件中再进行封装。
理由:
1、因为c源码里边经常是回调、结构体、多线程、全局变量满天飞,修改它是自找麻烦。
2、即便成功修改为c++文件,那么它就不能用于c的工程中了,有害无益。
当你把cpp的文件改为c编译时,错误肯定会成百上千,下面介绍错误对应的解决方法。
当你的c++文件未使用c++的特性或者使用很少时:
1、c++ 的库和类:如string.h list.h等
2、c++关键字:class bool 等
3、其他c++特性
那么你的c++文件可以当成c文件来用,少量的错误可以修改。
本人使用vs2012编译
1、如果一个c文件中的结构体写有构造函数的话
error C2061: 语法错误: 标识符“_AAA”
error C2059: 语法错误:“}”
解决方法:构造去掉,使用的时候用 memset类似函数或 手动赋值 初始化!!切记要对包含数组或指针成员的结构体初始化,否则你的程序将被判决死缓。
如下所示的用法将留下隐患:
2、使用不支持的关键字
error C2061: 语法错误: 标识符“xxx”
该关键字要删掉,用其他方法替换。比如bool的返回值,可以用int代替。引用& 符号传参,可改为指针 传参。
3、函数使用默认参数
error C2143: 语法错误 : 缺少“)”(在“=”的前面)
可以去掉默认参数,使用时自己赋值即可。
4、链接错误
error LNK2001: 无法解析的外部符号
c语言static函数作用域是该c文件,外边不可见,把static去掉可解。
暂时先写这么多,以后再增加。
如果你有个c的可用源码,尽量不要去修改它,而是建个.h来输出声明,在外边的源码文件中再进行封装。
理由:
1、因为c源码里边经常是回调、结构体、多线程、全局变量满天飞,修改它是自找麻烦。
2、即便成功修改为c++文件,那么它就不能用于c的工程中了,有害无益。
当你把cpp的文件改为c编译时,错误肯定会成百上千,下面介绍错误对应的解决方法。
当你的c++文件未使用c++的特性或者使用很少时:
1、c++ 的库和类:如string.h list.h等
2、c++关键字:class bool 等
3、其他c++特性
那么你的c++文件可以当成c文件来用,少量的错误可以修改。
本人使用vs2012编译
1、如果一个c文件中的结构体写有构造函数的话
error C2061: 语法错误: 标识符“_AAA”
error C2059: 语法错误:“}”
typedef struct _AAA { char a[32]; _AAA() { } }AAA;
解决方法:构造去掉,使用的时候用 memset类似函数或 手动赋值 初始化!!切记要对包含数组或指针成员的结构体初始化,否则你的程序将被判决死缓。
如下所示的用法将留下隐患:
AAA aaa;//未使用memset(&a, 0, sizeof(AAA)),aaa中的a成员是个随机值(野指针) strcpy(aaa.a, "123");//野指针指向地址已被赋值,指向的地址是未知的,什么时候修改掉不会知道。 //......未来的某一时刻,使用aaa.a将会是个乱码或者挂掉 printf(aaa.a);//此时a可能已经被改掉,你可能会看到乱码,或挂掉
2、使用不支持的关键字
error C2061: 语法错误: 标识符“xxx”
该关键字要删掉,用其他方法替换。比如bool的返回值,可以用int代替。引用& 符号传参,可改为指针 传参。
3、函数使用默认参数
error C2143: 语法错误 : 缺少“)”(在“=”的前面)
可以去掉默认参数,使用时自己赋值即可。
4、链接错误
error LNK2001: 无法解析的外部符号
c语言static函数作用域是该c文件,外边不可见,把static去掉可解。
暂时先写这么多,以后再增加。
相关文章推荐
- Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】
- c++ python交互之boost.python 简集之Vector(map)混合使用
- CLI/C++中混合类的使用【转】
- 看源码了解Gson excludeStrategy的使用
- 使用JNI进行混合编程:在C/C++中调用Java代码
- C++使用OLE高速读写EXCEL的源码
- 开放源码 C/C++ 单元测试工具,第 2 部分: 了解 CppUnit
- 使用JNI进行混合编程:在Java中调用C/C++本地库
- c和c++混合使用
- 使用#ifdef _cplusplus 实现c 和 c++的混合编程
- Qt5 C++源码中使用中文的简单步骤
- LIUNX 使用过程中的一些需要了解的知识点
- 使用Xcode阅读Makefile管理的C/C++项目源码(支持调试,符号跳转,自动补全)
- 基于Corba技术使用java与C++混合编程
- 使用gcc给待编译C/C++源码注入宏的2种方法
- C++内嵌代码使用压缩的方法(compress和uncompress函数)需要有zlib,编译时加-lz
- android studio使用c++与c混合编译是遇到不太好发现的坑
- 如何混合使用C和C++(下)
- c++ python交互之boost.python 简集之Vector(map)混合使用
- Qt5 C++源码中使用中文的简单步骤