你可以使用 C 语言,但不能使用 C + + (不仅要考虑编译器,还要考虑所有的支持工具、覆盖率、分析等)
你的目标开发者是 C 大师
您正在编写驱动程序、内核或其他低级代码
你知道 C + + 编译器并不擅长优化你需要编写的代码
您的应用程序不仅不适合面向对象,而且在这种形式下编写起来更加困难
但是,在某些情况下,您可能使用 想要而不是 C + + :
你想要汇编程序的性能而不是在汇编程序中编码的麻烦(理论上,C + + 能够“完美”的性能,但是编译器并不像一个优秀的 C 程序员那样善于看到优化)
你正在编写的软件是琐碎的,或者说几乎是琐碎的——拿出小小的 C 编译器,编写几行代码,编译,然后一切就搞定了——不需要打开一个带有帮助程序的大型编辑器,不需要编写实际上是空的和无用的类,不需要处理名称空间等等。对于 C + + 编译器,您可以做几乎相同的事情,只是使用 C 子集,但是 C + + 编译器速度较慢,即使对于很小的程序也是如此。
我很惊讶没人提到图书馆。许多语言可以链接到 C 库并调用 C 函数(包括外部“ C”的 C + +)。C + + 几乎是唯一可以使用 C + + lib 的东西(定义为“使用 C + + 中不在 C 中的特性的 lib (比如重载函数、虚方法、重载操作符,...) ,并且不通过外部“ C”导出所有通过 C 兼容接口的内容”)。
这本书 C 程序设计语言(又名: K & R)清楚地告诉你如何做一切的语言可以做在300页以下。这是极简主义的杰作。没有一本 C + + 的书能与之相提并论。
显而易见的反对意见是,大多数现代语言(如果不是全部的话)都可以这样说——它们也不能在仅仅几百页内告诉你如何处理所有事情。没错。那么为什么要使用 C + + 呢?特色丰富?权力?如果你需要一些更加丰富或者强大的特性,那么使用 C # 、 Objective C、 Java 或者其他类似的东西。为什么要用 C + + 的复杂性来增加自己的负担呢?如果你需要 C + + 授予的控制程度,那么我认为使用 C C 可以做任何事情,而且可以做得很好。
C + + 有一些 C 所没有的优秀特性,但是当人们在幕后编写没有明显副作用的代码时,C + + 的许多面向对象特性会导致巨大的编码混乱。疯狂的代码可以隐藏在构造函数、析构函数、虚函数中... ... C 代码的美妙之处在于,它在你背后没有做任何不明显的事情,因此你可以阅读代码,而不必查看每一个构造函数和析构函数等等。很多问题都是由于某些人糟糕的编码实践造成的。
我的完美语言应该是 C99和一小部分更安全的 C + + 功能的组合,这些功能在二进制输出中增加了 ZERO (或接近零)编译器开销。完美的补充是类封装和数据和函数的命名概念。