经C++创始人Bjarne Stroustrup博士同意,我翻译了这篇文章并贴在这里,供选择编译器的朋友参考。欢迎转载,转载请注明出处。
英文版原文在http://www.research.att.com/~bs/compilers.html
一个C++编译器的不完全列表
2008年11月18日更新
我(Bjarne
Stroustrup) 常常被提问建议的C++编译器,但是我不做建议,因为那样看起来很像站在商战的某一边。况且,我并不了解每一个C++编译器,仅仅知道C++编译器多如牛毛而已。一般而言,我使用半打(6个)编译器,但这充其量也仅仅不过是表面文章而已。
我建议人们选用一个编译器时认真考虑它跟标准的一致程度。如果可能,避免使用任何不太符合ISO标准或者不支持标准库某项实现的编译器。所有主要C++编译器供应商的最新版本都做得不错。
如果你是新手,不知道怎么识别一个编译器是否合适,试试编译下面这个程序:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cout << "Please enter your first name followed by a newline\n";
cin >> s;
cout << "Hello, " << s << '\n';
return 0; // 该返回语句可以不要
}
如果一个编译器不能处理这么简单的程序,那它不适合用来学习标准C++。(如果你剪切和粘贴以上代码,小心#include 指令后的”小于号”).
尽管现在这些细节问题早已经陈旧,这里有一篇很长的文章论述一致性问题和boost.org'的编译器状态页。一致性仅仅是编译器质量的一项指标(产生代码质量、出错信息、编译速度、跟开发工具集成、支持程度、向后兼容这些都是其他衡量指标),不过一致性很重要的一项。使用某供应商的语言扩展特性和非标准特性限制了你的代码可移植性而且妨碍你选择一个新供应商的产品。
大多数编译器内嵌在软件开发工具框架和库里面。这些框架、环境和库对你可能非常有用,但是记住使用它们会把你锁定到单一供应商,而且一些应用存在严重的运行性能问题。
当在网上寻找C++的时候,你会发现很多信息”隐藏”在各自产品下面。事实上,我用google.com寻找C++编译器比直接联系C++编译器供应商更方便。在此,忽略市场商标,我列出很多C++编译器的提供者。
一些编译器可以免费下载(尝试商业应用前要看看他们的条件/许可证):
一些编译器需要支付费用(有些允许试用期内免费下载):
对于我而言,让该列表完整和保持最新状态不太可能。C++世界太大,新东西出现太快。对于那些我未能列出来的供应商表示歉意,我知道会有一些,如果你有一个连接并认为应该在此列出来的话,请给我写信:bs at research.att.com。再次重申:我仅仅列出编译器,我并不是赞成它们。而且对于每个人而言,没有哪种编译器最好,不同的人有不同的需要。
C++编译器的其他列表:
一个过滤器可以用来改善很多编译器的错误信息,见STLfilt.