我想知道您是否有指向从C迁移到C ++的指南的链接。
我主要感兴趣的是检查C代码中可能存在编译器无法检测到的问题的结构?什么是变通方法?
注意:请不要回答编译器能够检测到的事情。
答案 0 :(得分:5)
调查此问题的一种方法是阅读C和C ++之间的一些不兼容列表,看看哪些产生运行时问题而不是编译问题。这样的名单很多,起点可能很好:
答案 1 :(得分:3)
你的意思是学习C ++,假设知道C?或者你的意思是将C项目翻译成C ++?如果是后者,如果项目具有任何重要的大小,我会说不要这样做。如果项目有任何动力那么它就是自杀;这是浪费时间,精力,动力和良好的精神。
答案 2 :(得分:2)
Effective C ++的前两个版本侧重于C ++程序员遇到很多陷阱。我想说的是效果C ++的第2版(它基本上是第一版的返工)。
也许我的答案无效,因为GCC实际上有一个有效的C ++标志。此外,对于严格别名等的现代警告,如果您在编译完所有警告的情况下进行编译,那么您就非常接近完美的C ++。
答案 3 :(得分:2)
你必须忘记所学的内容。
更严重的是 - 教授C ++最大的错误就是将其作为C语言的超集来教学.C和C ++是两种不同的语言,有不同的解决问题的方法。语法可能非常相似,但方法不同。虽然大多数有效的C程序都是有效的C ++,但这只是在C语言之上构建C ++的副作用。
使用C ++编译器重新编译C项目不会使项目成为C ++。
答案 4 :(得分:2)
除了你已经知道的事情,我想,new
/ delete
与malloc
/ free
等等有一个重要的危险,即C风格的演员表。如果你的代码有很多这些(通常这是不好的C代码),那么由于语法的原因很难找到它们。但是你应该将它们全部转换为正确的C ++样式转换。
然后有一些微妙的事情,两者只是以不同的方式解释,很难找到,并且在你做出这样的过渡后的一周到十年之间的任何时候都可能会咬你。
标识符就是这样的东西。尝试找出C ++ stat
是否表示函数或struct stat
。在这个例子中,这不是太糟糕,因为编译器可能会告诉你。但可能还有其他隐藏的东西。 sizeof
表达式在这里是一个特殊的陷阱,因为它们可以应用于表达式或类型。
sizeof
应该系统地检查。 E.g sizeof('a')
在C中与sizeof(int)
相同,在C ++中sizeof(char)
(1
)。 enum
常量与enum
变量相同。