3

如果您是 C 程序员或精通 C 的 C++ 程序员,您能告诉我您从 C++ 程序员那里注意到的最常见的错误/模式/风格是什么?例如,您是否注意到 C 程序员编写的 C 程序与 C++ 程序员编写的 C 程序之间的区别?如果您能提供一份清单,说明 C++ 程序员对 C 的主要误解,我将不胜感激。

我想学习 C,但是虽然 C++ 背景会有所帮助,但我担心它也会受到伤害。我有一个奇怪的假设,除了一些关键字和库之外,我不需要学习其他任何东西,因为我知道 C++。我对有这种假设感到难过,因为我确实认识到 C++ != C,但有时当我在 C++ 中使用 C 库或维护其他人的遗留程序 C++ 时,差异会变得模糊。

顺便说一句,我不是在问 C 中不存在哪些 C++ 特性,或者我们/他们是否使用“malloc”而他们/我们是否使用“new”。

谢谢。

4

4 回答 4

3

我经常看到的一件事是正确释放分配的内存。特别是与包含动态分配内存的结构相关联。使用 C++,析构函数会被自动调用,如果编写得当,它们会负责清理关联的对象。使用 C,您必须记住释放所有分配给结构的内存,或者记住调用某种为您执行此操作的 destruct 函数。

于 2011-06-07T16:56:19.183 回答
1

我不确定我是否会称其为“错误”,但是必须使用 C 的有经验的 C++ 程序员可能会创建很多看起来像类和虚函数表的东西。

这不一定是坏事,因为您当然可以在 C 中进行面向对象编程,但对于特定问题来说,这可能是矫枉过正。

于 2011-06-07T16:57:32.880 回答
1

我不能从个人经验中说出来,但我相信你可能会遇到一些微妙的问题,比如引用(添加&到变量名)作为函数参数,enums 不是像 C++ 中那样的完全限定类型,东西涉及返回 void 指针的内存函数......类似的事情。

于 2011-06-07T16:57:39.137 回答
-1

几乎,当您找到惯用的 C 代码时,它看起来与惯用的 C++ 代码相似,除了您必须破解所有缺少的语言功能并实现您自己的半成品版本。例如,宏 -> 模板/内联函数。void* 指针-> 继承。函数指针->函数对象。异常->转到和错误代码。

于 2011-06-07T16:53:56.190 回答