你需要掌握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去掉可解。
暂时先写这么多,以后再增加。