虽然人们似乎喜欢complain关于C++,但我没有找到很多证据来解释为什么你会 Select C++来 Select C++.C看起来没有那么多的高音,如果C++有所有这些问题,为什么你不能把自己限制在C子集上呢?你的 idea /经历是什么?

推荐答案

Joel的答案很好,因为您可能有have个理由使用C,尽管还有其他几个原因:

  • 你必须符合行业指南,在C语言中更容易证明和测试
  • 你有工具来处理C,但不是C++(不仅仅是考虑编译器,而是所有的支持工具、覆盖、分析等)
  • 你的目标开发者是C大师
  • 您正在编写驱动程序、内核或其他低级代码
  • 你知道C++编译器不擅长优化你需要编写的代码类型.
  • 您的应用程序不仅不适合面向对象,而且以这种形式编写会更加困难

不过,在某些情况下,您可能会 Select 使用C而不是C++:

  • 你希望汇编程序的性能不需要在汇编程序中编写代码(理论上,C++能够实现"完美"的性能,但编译器并不像优秀的C程序员那样擅长看到优化)

  • 您正在编写的软件是微不足道的,或者几乎是如此-拿出微型C编译器,编写几行代码,编译完毕-不需要打开带有帮助器的大型编辑器,不需要编写几乎空的和无用的类,处理命名空间,等等.您可以用C++编译器做几乎相同的事情,只需使用C子集,但是C++编译器速度更慢,即使对于小程序也是如此.

  • 您需要极端性能或小代码大小,并且知道C++编译器实际上会因为库的大小和性能而使其更难实现.

您争辩说,您可以只使用C子集并使用C++编译器进行编译,但是您会发现,如果这样做,根据编译器的不同,您会得到略有不同的结果.

无论如何,如果您这样做,您使用的是C.您的问题真的是"为什么C程序员不使用C++编译器?"如果是这样,那么您要么不了解语言差异,要么不了解编译器理论.

C++相关问答推荐

如何使用Win32 API正确、安全地打印到stdout/stderr?

海湾合作委员会是否保证大小匹配的访问?

初始化char数组-用于初始化数组的字符串是否除了存储数组的位置之外单独存储在内存中

球体—立方体重叠:无、部分或全部?

如何在Visual Studio代码中关闭此函数名称显示功能?

双指针指向常量双指针的指针类型赋值不兼容

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

如何在C-函数中混合使用C代码和ASM?

这个空指针类型的转换是有效代码还是恶意代码?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

链接器脚本和C程序使用相同的头文件,这可能吗?

不带Malloc的链表

如何使用空元素块声明指针数组

如何在不更改格式说明符的情况下同时支持双精度和长双精度?

将复合文字数组用作临时字符串缓冲区是否合理?

共享目标代码似乎不能在Linux上的进程之间共享

如何解释数组中的*(ptr)和*(ptr+2)?

不兼容的整数到指针转换传递';char';到类型';常量字符*

如何不断地用C读取文件?