C++编译器能产生不太好的二进制文件吗?您可以在这里考虑输出的健壮性和性能。有没有“最好的”C++编译器可以使用?如果不是,那么知名编译器(g++、英特尔C++编译器、Visual C++等)的强项是什么,当然还有哪些不是很强(已知的错误和问题)。
当编译器产生不正确的输出,从而导致关键任务软件失败时,是否有记录在案的情况?
发布于 2009-07-11 23:18:39
G++似乎是最受欢迎的。它是免费的,可移植的,而且相当不错。Windows (MinGW)在我上一次使用它的时候(大概一年前)已经过时了。
英特尔C++编译器被认为是生成最快代码的编译器(但众所周知,它会为AMD处理器生成错误的SIMD代码)。在非常严格的条件下,您可以在GNU/Linux上自由使用它。
我使用它已经有一段时间了,我喜欢它发出其他人不会发出的聪明警告的事实。
VC++通常被认为是最好的C++集成开发环境,据我所知,它的编译器也相当不错。它是免费的(就像免费啤酒一样),而且当然只在Windows上可用。
如果你对Windows编程感兴趣,我会推荐这个编译器,因为它总是最新的,并为此提供了更高级的功能。
我建议在Windows上使用VC++,在其他OSes上使用G++。自己试试I++的免费版本,看看值不值这个钱。
当编译器产生不正确的输出从而导致关键任务软件失败时,是否有记录在案的情况?
是的,有可能,但我要说的是,在大多数情况下,这可能是程序员的错。例如,如果有人不知道浮点算术是如何工作的,就很容易编写不可靠的代码。一个好的程序员还必须知道C++标准保证什么能工作,什么不能。程序员还应该知道编译器的限制是什么,例如它如何很好地实现标准,以及它优化的力度有多大。
发布于 2009-07-11 23:04:27
首先,你使用的是哪种平台通常决定使用哪种编译器。
第二,关于健壮性和性能的问题。我不确定你所说的健壮性是什么意思。但如果你指的是编译的二进制文件的正确性,我不得不说,只要你使用的是你提到的任何编译器的稳定版本,你就不会遇到“健壮性”问题。这些编译器都非常成熟,并且已经在无数的实际项目中使用过。所以我一点也不担心健壮性。
关于性能,这是一个很难回答的问题,因为每个编译器都有不同的优化技术,理论上可能会产生不同的性能。我希望有比我更有见识的人能告诉你这件事。
实际上,考虑到您提到的编译器都是高质量和成熟的编译器,您应该问的问题不是哪个编译器更健壮,而是:
然而,优化技术的问题是一个悬而未决的问题,而且这不是一个微不足道的问题。我希望一些人能对此有所了解。
发布于 2009-07-12 04:48:46
由于您在评论中提到“作为商用飞机系统的一部分”,因此可能值得查看由实际维护该领域或其他安全关键产品空间的认证的公司提供的编译器。Green Hills Software就是其中之一。Wind River是另一个。
https://stackoverflow.com/questions/1114860
复制相似问题