回答
的第一件事将是决定你要学习的语言。在学习C++之前学习C是没有必要的,反之亦然。
彻底地学习你所选择的语言。很少有母语为英语的人将德语与英语混合使用,反之亦然。编程语言也是如此 - 如果您熟悉自己选择的语言,即使它们有相似之处,也不可能将其他语言中的内容混合在一起。而且,随着时间的推移,你会认识方言。
阅读C和C++之间的不兼容性。最初的C++标准明确列出了它与前面的标准C(ANSI C89或ISO C90)之间的所有兼容性。关于不兼容性有很多很好的资源可供免费获得 - 一些专注于C开发人员,一些专注于C++开发人员。
配置您的编译器(或IDE或构建脚本),以便编译器能够检测您选择的语言的偏移。还要将其配置为最大警告级别(几乎没有编译器是以这种方式配置的),并努力使代码从不会触发编译器的最小警告。更好的是,用多个编译器来做到这一点。
如果没有上述步骤,下面的经验法则将会不太有效。毕竟,如果不理解潜在的推理,经验法则就不太有效。
一些经验法则,如果使用C开发,避免使用C++特有的特性。
- 不要使用运营商新的或删除使用任何标准头
- 避免没有.H扩展名(例如 ,
#include <stdio.h>
是C,#include <iostream>
是C++。 - 不要使用例外。
- 不要使用类,使用结构。
- 不要在结构中指定成员函数。
- 不要在结构中使用访问说明符(公共,私有,受保护)
- 不要重载函数(即不要使用同名的函数但不同的参数列表编写两个或多个函数)。
- 如果您打算使用
bool
类型(和值true
和false
),那么使用#include <stdbool.h>
(C99或更高版本)。 - 请勿使用模板。
- 如果某个函数不接受任何参数,则用void参数 列表声明它。例如,表示该功能不需要参数 。
- 请勿使用名称空间。
- 请勿使用C++风格演员表(
const_cast
,reinterpret_cast
,dynamic_cast
,static_cast
)。使用普通的C风格的类型转换(例如(int *)
的东西转换成一个指针为int)
一些经验法则,如果用C++开发,以避免特定于C-功能。
- 不要使用malloc(),realloc(),calloc()或free()来动态分配内存。
- 避免使用有.h扩展名(对 例如任何标准的头,
#include <stdio.h>
是C,#include <iostream>
是C++。让显著使用标准库的C++。 - 如果您打算使用
bool
型(和值true
和false
), 不#include <stdbool.h>
,这是因为bool
,true
和false
是在C++中的关键字,但宏在标准C. - 如果一个函数接受任何参数,不要用它声明无效论据 名单。
- 使用命名空间或函数重载来解决您希望具有指定命名方案的多个函数的情况。
- 不要使用C风格演员,永远。使用C++风格强制转换
const_cast
,reinterpret_cast
,dynamic_cast
,static_cast
)。
母语为英语的人将两种语言混合在一起 - 法语 - Summat与诺曼征服 – 2015-02-07 10:08:22
英语本身源自很多语言,Ed。但一位母语为英语的人会将这些事情看作是英语,而不是混合法语,西班牙语,拉丁语或他们所选词汇的任何语言。 – Rob 2015-02-07 10:24:01
我知道 - 只是对你的陈述进行观察。 – 2015-02-07 10:25:20
C++在20世纪80年代中期脱离了C,当时它已经获得了大部分熟悉的功能。它继续包含最近C99和C11修订版的功能。 C++与C的交集是一种完全合理且有用的语言。
最近,GCC编译器项目在验证他们成千上万(几百万?)的复杂C代码行真的已经大部分有效的C++后,从C切换到C++。
您可以继续学习C,不要太习惯于复杂的功能或古怪的技巧,只需在需要更加结构化的东西时切换到调用C++编译器。
或者,使用C++编译器一直以来,与-Wall -pedantic
选项。有丰富的资源对这样的便携性:
- 1. 如何避免使用GoogleTest混合测试和生产代码?
- 2. 混合Objective-C和C++代码
- 3. 以多种类似方法避免重复代码(C#)
- 4. C#避免重复代码
- 5. c#避免拳击和重复代码
- 6. 调试混合JNI代码的方法?
- 7. 避免使用C#
- 8. 将VB.net代码与c#代码混合
- 9. 组织sqlite3的C/C++编写的语句(避免全局代码混乱)
- 10. 无法理解混淆的C代码
- 11. 混淆或地穴C/C++代码
- 12. 在Windows上用Visual Studio混合C#代码和未被管理的C++代码
- 13. jQuery/javascript - 无法找到避免代码添加类的方法
- 14. 使用Decimal.Round()方法(C#/ CF)时避免编译
- 15. C#泛型避免代码重复?
- 16. 无法使用C#代码
- 17. 避免代码复制的最佳做法?
- 18. 混合C和C++
- 19. 混合的Objective-C与C和代码组织
- 20. 在下面的伪c代码片段中,应该避免代码重用的方法是什么?
- 21. 内联C#代码和Page_Load方法
- 22. 使用java中的方法避免!= null
- 23. 通用方法调用。避免服装代码
- 24. 混合C++和Objective C的
- 25. 与Berkeley DB混合的C++/CLI代码
- 26. 任何使用Kdevelop自动缩进c/C++代码的方法?
- 27. 处理混合业务和表示代码的最佳方法?
- 28. C++语法和代码
- 29. 揭露的Borland C++中我用Borland C++代码的方法C#
- 30. 我们可以混合C和C++代码
这甚至意味着什么。 – 2015-02-07 07:09:23
'有人在不知不觉中混合C和C++会有多常见?取决于这个人。 '如何避免C和C++的混合?'又取决于这个人。 – deviantfan 2015-02-07 07:12:18
第一季度答案:从C过渡到C++时非常普遍。 Q2的答案:通过练习,被不好的代码咬了几次,从书本和在线资源中学习。 – 2015-02-07 07:12:29