探索C++編譯器構(gòu)造
所謂C++編譯器其實(shí)也不是什么太難的東西,他是一個(gè)與標(biāo)準(zhǔn)化C++高度兼容的編譯環(huán)境。只有這樣的編譯器對(duì)C++開(kāi)發(fā)人員來(lái)說(shuō)才是最有意義的工具,尤其是對(duì)于程序設(shè)計(jì)語(yǔ)言的學(xué)習(xí)者。
經(jīng)常有人向我(Bjarne Stroustrup)詢問(wèn),能否推薦一個(gè)C++編譯器。但是,我不能做這樣的推薦,因?yàn)檫@樣非常容易卷入一場(chǎng)商業(yè)戰(zhàn)爭(zhēng)。同樣,我也不知道每一種C++編譯器,因?yàn)樗鼈冇刑嗟南嗨频牡胤?。我使用六種C++編譯器來(lái)完成基本需要,但是僅僅從表面上來(lái)看它們都是參差不齊的。
我建議人們使用和標(biāo)準(zhǔn)嚴(yán)格一致的編譯器。如果你這樣做,就能夠避免編譯器不和ISO標(biāo)準(zhǔn)近似的情況,以及不能使用標(biāo)準(zhǔn)庫(kù)的情況。最近一些來(lái)自主要C++廠商發(fā)行的編譯器都是這樣做的。
如果你是一個(gè)新手,不知道如何查看編譯器的構(gòu)造,那么使用下面的代碼:
- #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; // this return statement isn't necessary
- }
如果編譯器不能處理這段簡(jiǎn)單的程序,那么它就不能作為學(xué)習(xí)標(biāo)準(zhǔn)C++語(yǔ)言的候選編譯器。這里有一篇很長(zhǎng)的文章論證編譯器的一致性,和boost.org的編譯器狀態(tài)文章。一致性是編譯器質(zhì)量的一部分(產(chǎn)生代碼的質(zhì)量。
錯(cuò)誤消息,編譯速度,工具集成,支持程度,向后兼容,以及其它重要的方面),但卻是很重要的一部分。編譯器廠商對(duì)語(yǔ)言的擴(kuò)充和非標(biāo)準(zhǔn)特性的使用限制了程序的簡(jiǎn)捷性,并且可以防止你選擇一個(gè)新的編譯器廠商。
目前的編譯器都嵌入到了軟件開(kāi)發(fā)工具和開(kāi)發(fā)庫(kù)的框架里邊。這些框架、環(huán)境、庫(kù)都非常有用,但是要記住一點(diǎn)是,對(duì)這些工具的使用將會(huì)使你局限在單一的賣主上,局限在重要的執(zhí)行性能上。
當(dāng)在網(wǎng)上尋找C++編譯器時(shí),你可以發(fā)現(xiàn)隱藏在幾種產(chǎn)品名稱后的信息。實(shí)際上,使用google.com,我非常幸運(yùn)的發(fā)現(xiàn)了C++編譯器的信息,這比起從廠商目錄中尋找要好的多。這里,我選擇了一個(gè)C++編譯器的名稱列表,不考慮它們的市場(chǎng)情況。
【編輯推薦】