我想知道是否有一些迁移从C到C++的指南链接。
我主要关心的是检查C代码中可能存在的编译器无法检测到问题的结构?有哪些解决方法?
注意:请不要回答编译器能够检测到的事情。
我想知道是否有一些迁移从C到C++的指南链接。
我主要关心的是检查C代码中可能存在的编译器无法检测到问题的结构?有哪些解决方法?
注意:请不要回答编译器能够检测到的事情。
一种调查这个问题的方法是阅读一些C和C++不兼容性列表,并查看哪些会导致运行时问题而不是编译时问题。这样的列表很多,好的起点可能是:
你的意思是在已经掌握C语言的前提下学习C++吗?还是指将一个C项目翻译成C ++?如果是后者,并且该项目规模较大,我建议不要这样做。如果该项目有任何发展势头,那么这就是自杀行为;这是浪费时间、精力、动力和积极性。
《Effective C++》的前两版主要是针对从C转向C++的程序员,帮助他们避免一些陷阱。我建议选择第二版(它基本上是第一版的修订版)。
也许我的答案无效,因为实际上GCC有一个“Effective C++”标志。此外,使用现代警告(如严格别名等)启用所有警告后,如果您能使所有内容都编译通过,那么您就已经非常接近完美的C++了。
你必须放下你所学过的。
更加严肃地说——教授 C++ 的最大错误就是将其视为 C 语言的超集。C 和 C++ 是两种有不同问题解决方法的语言。虽然它们的语法非常相似,但是解决问题的方法是不同的。虽然大多数符合 C 语言规范的程序也适用于 C++,但这只是在 C++ 基础上构建的副作用。
使用 C++ 编译器重新编译 C 项目并不能使其成为 C++ 项目。
new
/delete
与malloc
/free
等,有一个重要的危险,那就是C风格的转换。如果你的代码有很多这样的转换(通常这是不好的C代码),由于语法的缘故,它们很难找到。但你应该将它们全部转换为正确的C++风格转换。stat
是指函数还是struct stat
。在这个例子中这并不太糟糕,因为编译器可能会告诉你。但还可能有其他隐藏的问题。在这里,sizeof
表达式是一个特别的陷阱,因为它们可以应用于一个表达式或一个类型。
sizeof
总体上是你应该系统地检查的东西。例如,在C中,sizeof('a')
与sizeof(int)
相同,在C++中,sizeof(char)
(所以是1
)。对于枚举常量与枚举变量也是如此。