哪个是最好的C ++编译器?

时间:2009-07-11 22:52:20

标签: c++ compiler-construction mission-critical

C ++编译器能否产生不太好的二进制文件?您可以在这里考虑输出的稳健性和性能。是否有“最佳”C ++编译器这样的东西?如果没有,那么着名的编译器(g ++,英特尔C ++编译器,Visual C ++等)的优点是什么,当然还有不那么强大(已知的错误和问题)点。

当编译器产生错误输出导致任务关键型软件出现故障时,是否存在文档记录?

9 个答案:

答案 0 :(得分:17)

G ++似乎是最受欢迎的。它是免费的,便携式的,非常好的。 Windows端口(MinGW)在我上次使用它时(可能是一年前)真的过时了。

英特尔C ++编译器被认为是生成最快代码的编译器(但是已知它会为AMD处理器生成错误的SIMD代码)。 您可以在相当严格的条件下在GNU / Linux上自由使用它 我已经使用了一段时间,我喜欢这样一个事实,即它会发出其他人没有的聪明警告。

VC ++通常被认为是最好的C ++ IDE,从我听到的编译器也很好。它是免费的(如免费啤酒),当然只能在Windows上使用 如果您对Windows编程感兴趣,我建议使用此编译器,因为它始终是最新的,并为此提供了更多高级功能。

我建议在Windows上使用VC ++,在其他操作系统上使用G ++。自己尝试免费版的I ++,看看它是否物有所值。


  

当编译器产生错误输出导致任务关键型软件出现故障时,是否存在文档记录?

是的,可能,但我会说大部分时间都可能是程序员的错。例如,如果某人不知道浮点运算如何工作,则编写不可靠的代码很容易。一个优秀的程序员也必须知道C ++标准保证什么是有效的,哪些不是。她还应该知道编译器的限制是什么,例如:它如何实现标准以及它如何积极地进行优化。

答案 1 :(得分:3)

首先,您使用的平台通常决定使用哪个编译器。

其次,您关于稳健性和性能的问题。我不确定你的稳健性是什么意思。但是如果你的意思是编译的二进制文件的正确性,我必须说,只要你使用你提到的任何编译器的稳定版本,你就不会遇到“健壮性”问题。这些编译器都非常成熟,已经被用于无数的现实生活中。所以我根本不担心稳健性。

关于性能,这是一个难以回答的问题,因为每个编译器都有不同的优化技术,理论上可以产生不同的性能。我希望有一个比我更了解的人可以告诉你这件事。

实际上,鉴于您提到的编译器都是高质量和成熟的编译器,您应该问的问题不是哪个编译器更强大,而是:

  • 哪个是支持我的目标平台的编译器
  • 哪个编译器适合我的开发环境和工具?
  • 哪个编译器是我的开发团队和最熟悉的集成商。

然而,优化技术的问题是一个悬而未决的问题,而且这是一个非常重要的问题。我希望有些人可以对此有所了解。

答案 2 :(得分:3)

由于您在评论中提到“作为商用飞机系统的一部分”,因此可能值得查看实际在该空间或其他安全关键产品空间中进行认证的公司提供的编译器。 Green Hills Software就是一个。 Wind River是另一个。

答案 3 :(得分:2)

除了BastienLéonard之外,还有一个回答:还有一个多平台C ++编译器 - Comeau。它是最符合标准的C ++编译器。最新版本支持C ++ 0x核心语言。

答案 4 :(得分:1)

您使用的平台是什么?例如,Visual C ++在Linux上不会对你有用。

实际上,由于这些原因,你提到的三个是我选择的三个。

gcc / g ++:在许多Linux和UNIX系统上通过多年的协作经验开源,经过验证和完善。不那么强大的观点仅仅是它是一个独立的命令行工具。你可以制作或者可能找到你自己的IDE风格的环境,但它并没有那样“运送”,可以这么说。

Visual C ++:得到Microsoft的大力支持,大量的代码示例和文档(MSDN)自然而然地挂钩了Windows API。不那么强烈的观点是它不是特别的,“视觉上”。如果您习惯使用Visual Basic(比如说),您会发现Visual C ++根本不会以相同的方式工作。

英特尔C ++编译器:唉,我没有英特尔编译器的经验,但我相信它支持并行性并且具有高精度数字库。

另一个值得一提的是Borland的C ++ Builder。通过与Delphi的VCL兼容,它可以成为一个快速的应用程序开发环境,具有丰富的附加控件,但相反,在C ++ Builder中开发的代码不容易移植到其他C ++编译器。

答案 5 :(得分:1)

如果您在谈论高性能计算意义上的高性能输出代码,您可能也会对Portland Group's compilersIBM's XL compilers感兴趣。

答案 6 :(得分:1)

优化编译器的重点是它应该生成一个功能上与原始程序等效的优化程序。当然,功能等同与可观察的效果有关;国家自然不会是一样的。在我看来,任何可以生成错误翻译的编译器都很糟糕,尽管我认为你可以在不同情况下放松某些问题。主流编译器的一个优点是错误修复得更快。

对于性能,编译器通常执行两种类型的优化:独立于平台的优化(在源级别/语法树/中间表示)和特定于平台的优化。

我猜想最好的平台无关优化可能是对现有编译器的各种学术修改(但可能是不同的优化和每个)。这些优化最终得到认可,并最终渗透到主流中。

对于特定于平台的优化,我认为制作这些平台的公司通常具有最佳优化(例如,内部英特尔编译器),但它们尚未集成到通用可用性编译器中,并且最终也会逐渐减少。

答案 7 :(得分:1)

http://www.compilers.net/Dir/Free/Compilers/CCpp.htm

微软有一个很好的免费编译器,但如果你正在使用unix或mac,这对你没那么好。

Borland也有很好的免费编译器。

我已经尝试了几个免费的编译器,并对Dev-C ++感到最舒服。整个包的尺寸相对较小,有windows和linux风格。对我来说,测试C ++语言的极限是完美的。它编译速度快,使实验变得容易。

我推荐你这个名为Digital Mars C / C ++ Compiler的软件,你可以从中获得它 http://www.brothersoft.com/digital-mars- ... 它是适用于Win32,Win16,DOS32和DOS环境的免费C / C ++编译器。

答案 8 :(得分:-8)

我发现使用Cygwin存在问题,这种代码无法编译但在编译器内部生成分段错误。相同的代码适用于MinGW。

[edit]以下是编译器报告:

lista.h: In constructor `Lista<Dado>::Lista() [with Dado = int]':
principal.cpp:15:   instantiated from here
lista.h:13: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://cygwin.com/problems.html> for instructions.

我没有再生成错误的源代码,所以我无法提交报告。

<强> [/编辑]