C/C++在線編譯器


     一直以來都喜歡用手機看書,尤其是在上班時。看的最多的是編程一類的書,主要是C++,看着就想寫寫代碼,可是電腦用不能用,怎么辦?於是想到用UC瀏覽器找找看網上有沒有在線的編譯器,想什么時候寫代碼都可以驗證。於是就找了幾個,各有千秋吧。中文的我沒找到,全是英文的,不過英文不難,其實也不需要懂英文,只要知道在什么地方寫代碼,然后點擊按鈕進行在線編譯就行了。好了,下面看介紹: 

1、http://codepad.org/ 

推薦星級:★★★★ 

是否需注冊:否(注冊的話也很快,幾秒鍾而已) 

優點:網頁界面簡潔,一目了然,適合手機瀏覽器。且支持C,C++,D,PHP,PYTHON,Perl,Ruby等十幾種編程語言,非常強大。查看執行結果時,高亮顯示代碼。 

缺點:有時點擊提交按鈕后,給出一個出錯頁面,需多次提交才給出結果。另外不具有交互性,且不提供編譯后的可執行文件。 

2、http://www.comeaucomputing.com/tryitout/ 

推薦星級:★★ 

是否注冊:貌似不需要(網頁上顯示,注冊后功能更多) 

優點:編譯器的版本多 

缺點:頁面文字較多,不適合手機瀏覽,且編譯后顯示結果不明了,反正我最簡單的"Hello World"程序好像都通不過 

3、http://www.botskool.com/online-compiler(本人最喜歡的) 

推薦星級:★★★★☆ 

是否注冊:需要(注冊簡單,絕對值得) 

優點:自動記錄上一次所寫代碼,執行結果顯示明顯,並且可以進行簡單的交互(我認為是亮點)。網站提供了交流論壇,編程學習資料。缺點:頁面廣告文字較多,不過手機瀏覽的話還可以接受。無論是編寫代碼還是查看結果,頁面大面積是其他用戶代碼示例,顯得頁面臃腫。支持語言少,只有C,C++,Java三種。 

4、http://onlinecompiler.net/(現在不知道為什么打不開了,前幾天還可以用,在這列出來先) 

推薦星級:★★★ 

優點:記不清了,只記得可以下載編譯后的exe文件(這就是我列出來的原因) 

缺點:不記得了 

5、http://cmpe150-1.cmpe.boun.edu.tr/phpccompiler/login.php 

推薦星級:★★★ 

是否注冊:否 

優點:編輯時有感應提示框,高亮顯示語法,可下載編譯后exe文件。界面簡潔。 

缺點:只支持C語言。只支持IE6以上瀏覽器,其他瀏覽器一概不支持,手機無法瀏覽。不在線顯示運行結果。沒有出錯提示。 

6、http://ideone.com 

推薦星級:★★★★★ 

是否注冊:否(注冊后功能更強大) 

優點:我見過的支持語言最多的,多達58種(哥驚呆了),編輯功能最強大的(顯示行號,語法高亮,查找,定位到行,全屏顯示,行信息,列信息顯示),錯誤信息顯示清晰,結果顯示明顯,有簡單交互功能,可以上傳源文件進行編譯,並且可以下載exe文件,界面簡潔更難能可貴。

 

---------------------------

原文:http://blogs.msdn.com/xiangfan/archive/2008/08/29/online-c-compilation-service.aspx

網上有許多在線C++編譯器。你可以利用它們對你的代碼針對各種C++編譯器進行兼容性測試,而不需要購買和安裝這些編譯器。

下面的網址是最有名的兩個在線C++編譯網站:

許多在線判題系統也可以用來進行在線編譯:

你可能會好奇這些網站使用的編譯器的版本和編譯參數到底是什么。有些網站會提供這些信息,而有些則不會。那么你就只能靠自己去發現這些“秘密”了。

工欲善其事,必先利其器。讓我們先看看一些從編譯器獲取信息的小技巧。

1. 輸出宏

在C++中, 字符串常數不能作為模板參數。大多數編譯器會在錯誤信息中同時輸出字符串的內容。下面的代碼展示了這一技巧。 

template<const char *> class A {};
#define F0(x) #x
#define F1(x) F0(x)
#define V1 F1(__GNUC__)
int main()
{
    A<V1> a1;
}

這里,宏F0和F1用於將整型轉換成字符串。編譯器會輸出類似於"literal "3" is not a valid template argument because it is the address of an object with static linkage"的出錯信息。里面的"3"就是你想知道的宏的內容。

2. 輸出常數

同樣,浮點數是不能作為模板參數的。編譯器通常會在錯誤信息中包含浮點數的值。利用這一點,我們可以輸出浮點常數。不過很不幸的是,VC會隱式的將浮點類型的模板參數轉換成int(參見https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=296008

下面是一種輸出整型常量的方法: 

template<int N>
class A
{
private:
    A();
};
int main()
{
    A<sizeof(char)> a;
}

3. 輸出變量類型

有時候,你可能需要知道某些變量的實際類型,這時候你可以使用下面的代碼: 

struct Dummy {};
void Fun(const Dummy &);
int main()
{
    Fun(1+1U);
}

PS:如果你使用的是gcc,那么它會輸出"not convert `2' to `const Dummy&'",所以你需要將Fun的聲明改成"template<typename T> void Fun(T);"(換句話說,在gcc中上面的代碼也可以用於輸出常數的值)

4. 輸出包含路徑

如果要獲取STL頭文件的路徑,你可以使用: 

#include <ext/hash_set>
using __gnu_cxx::hash_set; 

int main()
{
    hash_set<> m;
}

PS:這里也可以使用vector。

好,現在是時候牛刀小試了。關於如何獲取編譯器的版本信息,可以參考這篇文章:Pre-defined Compiler Macros

下面是利用上面介紹的技巧獲得的dinkumware網站的一些資料:

1. VC

版本 (_MSC_FULL_VER):
         VC8 140050727 
         VC7.1 13103077 
         VC7 13009466 
         VC6 12008804

包含路徑: 
         D:\cplt501_vc_source\include (with _CPPLIB_VER=501)

2. EDG

版本(__EDG_VERSION__):
         3.05

編譯參數:
         edgcc --alt -D_WIN32 -D_M_IX86 --no_inlining --diag_suppress=1290 --long_long --wchar_t_keyword -D_C99 -ID:\cplt501_gen_source/include/c -ID:\cplt501_gen_source/include -IC:\PROGRA~1\MICROS~2.NET\VC7/include --exceptions --microsoft -c sourceFile.cpp

因為使用了VC兼容模式進行編譯,所以編譯器可能會模擬VC的部分bug

3. GCC

版本:
         3.2.0

包含路徑:
         D:/cplt501_gen_source/include and D:/Mingw/include/c++/3.2/

可以看到這里使用的GCC的版本已經相當陳舊了

 

-----------------------------

http://ganquan.info/g++-compiler/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM