您的位置:首页 > 编程语言 > C语言/C++

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: 语法错误:“}”

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去掉可解。

暂时先写这么多,以后再增加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: