GCC4 2 1與VC6 0編譯器容錯性小對比

2022-03-15 22:57:26 字數 1407 閱讀 8259

雖然才用linux不久,但我現在寫寫小程式的時候已經習慣了gcc+gdb+vim的模式,說實在的我目前也只是照著網上那些愛好者們的說法來做,他們說怎樣好,我就試著去學習怎樣的模式,我知道這樣太盲目,可是也沒有更好的辦法去選擇,除了在網上找找資訊外,遇見什麼問題身邊連個討論的人都沒有。無奈,希望能早點看到linux普及的那天--會有那麼一天麼?我心裡沒底。

學校安排的上機還都是在vc6.0的環境下,以前在那裡寫程式的時候也沒啥感覺,可把我在gcc4.2.1編譯通過的程式拿到vc6.0下狂報錯誤的時候,我意識到了一些不同……

只是從一兩個小程式裡得出的幾點簡單的體會,也還是分點說說吧,以後再補充。

第一,有關標頭檔案。

比如說我想用string資料型別並呼叫一些相關的函式進行操作,在gcc4.2.1下不用包含string標頭檔案就可以隨意使用sting類和它的成員函式,但我把同樣的程式移到vc6.0下去編譯的時候,就出了幾個錯誤,其中最主要的就是標頭檔案包含問題,除了要包含string類外,有些函式呼叫還要用到algorithm標頭檔案。我想,按標準來講肯定也不是就能夠不包含,只不過是容錯性良好的gcc幫我自動加上了吧。

第二,有關函式返回型別。

這點估計是最常見的問題了吧,我這類菜鳥在vc6.0下比較常見的寫法是void main(),在gcc下常見的寫法是int main(),很顯然這移到對面去編譯是都不能通過的,但讓我奇怪的是在很多情況下在vc6.0裡我用int返回型別,在最後加上return 0;也不行,這點一直想不通。

第三,有關初始化問題。

比如我想定義所有元素都為0乙個陣列,在vc6.0下,如果把陣列定義在函式體內部,我必須用const常量或數值常量顯式地指明陣列的長度,並指定一些元素的值為0才行,如果想其自動初始化,那必須將陣列定義為全域性。而gcc下則要隨便得多,我可以用乙個呼叫時才知道值的變數來指定陣列的長度,可以在函式體內部定義未初始化的陣列,這些編譯並且執行的時候都不會出任何問題。

第四,有關重定義的容錯

舉個簡單的例子吧:

for(int i=0;i!=x;++i) ......;

..........;

for(int i=0;i!=6;++6) ......;

..........;

很明顯,這裡的變數名i被重定義了。可以令我驚奇的是在gcc下居然編譯執行一點問題都沒有,而在vc6.0下一編譯就報錯。

有很多愛好linux的朋友們老在批評vc對標準c++的支援是多麼的濫,這點我目前還沒有體會到,也許以後學深一點會感覺到。但是從以上這幾點來說我感覺其實vc也不錯,至少它很嚴謹,對初學者按標準語法的用法的良好習慣養成是很有益的。gcc是很強大,我見識到了它的容錯性也很強大,可是目前我卻有點猶豫了,在它強大的容錯性下,有很多錯誤的用法不會被報出來,我也就永遠不知道自己錯了,我指不定就會養成多少的壞習慣。我會繼續gcc下去,可是對寫的每個程式,我要重新解讀,不要被本是為方便程式設計師的容錯功能給縱容了……

VC6 0 編譯器BUG修正收集

1.error spawning bscmake.exe 解決 project,setting,browse info,去掉選項build browse info file 2.fatal error lnk1210 exceeded internal ilk size limit relink w...

關於VC6 0 和其他VS編譯器

最近想寫一些 mfc應用程式,在發布的時候遇到了幾個問題,從中得到了一點體會,與大家分享一下。遇到的幾方面問題的起因 1.自己用vs 剛換win7 編譯好的程式在其他人那裡無法執行,提示缺少 mfc庫 2.上面的問題好解決,用靜態 mfc方式重新發布,卻發現原本 200多 k的程式變成了 1m多。3...

VC編譯器與GCC編譯器的區別

今天無意寫了一段 發現了vc編譯器與gun的gcc編譯器還是存在區別的。畢竟gcc支援的是標準c。include struct node int main 上述 在gcc下是編譯失敗的,提示的錯誤 uknown typename node 但是放到vc編譯器下則順利編譯通過。於是按照標準c寫了另外乙...