C 語言用 gcc 和 vs2013 編譯有什麼區別?
01-11
用vs2013寫了一個計算器的程序,調試編譯運行成功了。但是代碼發給老師,老師用的是linux+gcc4.8.2,編譯成功後,運行出的結果一直都是錯誤的。我自己也配置了linux和gcc,對同一個代碼文件編譯後,生成一個a.out,和test文件,a.out運行和我在vs中的結果一樣,但是運行test卻是錯誤的結果,我把a.out刪除後再次編譯一個a.out,這次編譯完運行的結果就是錯誤的。學習c一直用的是vs,可能有一些代碼不規範,想問下大概有哪些原因出現這些情況。
你說那麼多,不如把代碼貼出來,我們一看就知道。
從描述來看,顯然是你程序有bug,多半還不止一個。至於bug是什麼,C語言初學者能犯的千奇百怪的錯誤太多了,沒人能一一列舉的。
@陳碩 的答案里說讓你把代碼貼出來,這個是沒錯的。但如果你貼一堆代碼的話肯定也沒人看。所以你要縮小範圍,把可能bug定位在5-10行代碼之內再貼出來。不過當你做到這點的時候,你自己差不多也意識到哪裡出問題了。
所以,如同每個大牛的必經之路一樣,自己靜下心來認認真真debug吧。先搞清楚你每一個步驟操作都是幹什麼,輸入是什麼輸出是什麼,再談怎麼去查錯的問題吧。
對同一個代碼文件編譯後,生成一個a.out,和test文件,a.out運行和我在vs中的結果一樣,但是運行test卻是錯誤的結果,我把a.out刪除後再次編譯一個a.out,這次編譯完運行的結果就是錯誤的。
看到這句就覺得這個時候開始盲目的 debug 根本沒意義,因為反正都是「只有 4 格視野的黑暗系迷宮」。
確實兩種編譯器會有差別,比如 fflush(stdin); VS中會清除鍵盤緩衝區,而gcc嚴格按C語言標準走,這句沒有任何效果。你肯定是寫了類似的不規範的代碼
如果你用linux裝clang吧,如果ubuntu 執行
sudo apt-get install clang
這個編譯器非常智能,不知道甩gcc幾條街,少個符號會用箭頭給你指出來,
少個stdlib提示你加上stdlib,如果你用了微軟專用的函數,它會告訴你沒有這東西,反正報錯很容易看懂。這問題不好回答。試問,我昨晚吃飯拉肚子了,中午吃的就不拉,各位,我中午的飯和晚上的有何區別?
我記得vs裡面有一個語句因為安全原因,增加了一個_後面還有東西,可能就是編譯錯誤的原因吧
……可能你們用的是不同的語言標準 C89, C99, C11
推薦閱讀: