A. 同樣一段代碼,為什麼編譯器不同會不同結果
這很正常,每種語言的標准只是給出了該語言實現的最小集合,而廠家或者開源社區做編譯器的時候,只要遵循這些標准就可以,在此基礎上增加的非標准功能,就有可能不一致了。
B. C語言同一段代碼,同樣的文件,編譯器為什麼運行結果不一樣
一般來說,C語言程序被編譯為可執行程序後,每次都輸出都是相同的,但有些特殊情況例外,比如,代碼中引入了隨機變數,並讓它出現在輸出結果中。
C. 每個編譯器都不一樣么 c語言一般用什麼編譯器 每次一種編譯器不能編譯 另一種卻能編譯出
編譯器就是c語言編譯成二進制的東西,
不同的編譯器是不同的,
比如16位系統和32位系統的編譯器就不同,因為16位的認為int是2位元組,32位的則認為是4個位元組。
另外
linux上的編譯器跟windows下的編譯器也不同,linux上的認為內核空間佔1G,而windows下則認為佔2G,
此外兩個系統對環境變數以及其他的設置也不同所以編譯器更不能用。
而且不同的CPU的指令集時不同的,所以同樣int
a
=1
最後被編譯成的二進制代碼也是不同的。
C語言的編譯器有很多,windows下的編譯器也有很多,不同的編譯器可能會做一些不同的優化,linux下的gcc也可以添加選項讓他編譯windows下運行的程序。
main(int
argc,char*argv[
】
)
argc
是你的參數個數
argv是你的參數。
比如你最終程序叫
add
那麼
你在命令行執行add
1
2
那麼argc
=3
第一個參數使你的add,
第二個第三個就是
1
2,
在函數內部你就可以獲取這倆參數進行相加然後列印
visual
是個IDE,集成開發環境,已經集成好了windows下使用的編譯器連接器
等,
編寫代碼完成後直接點擊編譯就行了。
IDE的默認編譯器是可以更改的,不同的IDE設置不同。
D. 為什麼匯編代碼在不同編譯器上結果不一樣
也許是masm版本不同引起的,高版本功能更強、會進行某些優化。
另,有些功能,在匯編中也會有不同的實現方式;再,高版本對偽指令的用法也許進行優化調整。
E. 不同的c語言編譯系統差別在哪裡代碼是否 存在兼容性的問題
ANSI
C
一般都可以支持,但也涉及到不同版本的C標準的兼容性問題,比如VC6不支持C99,VS2003,2005,2008,20120等就可以部分支持C99標准;而且很多標准並沒有規定實現,不同的編譯器實現可能不同,比如C標准只規定了short<=int<=long,但並沒有規定位元組數,導致不同的編譯器數據類型的大小各不相同。
非
ANSI
C標準的話,不同的編譯器一般都有不同的實現,需要分別實現。
在移植到不同編譯器的時候這些都要注意處理,比較常規的做法是數據類型和函數等自己根據不同編譯器封裝成一個統一的格式,在程序中使用封裝後的數據類型或函數,而不要使用原生類型,這樣在移植時只需要在封裝的地方根據編譯器的不同進行修改就可以了,不需要再修改源代碼。
F. C語言的編譯器為什麼有許多不同的版本並且在不同的編譯器版本下C語言的語法規則也不盡相同
C的標准本來就有多個版本,目前編譯器採用的標准比較常見的是ANSI C和C99。另外語言標准中也存在未定義行為,留給編譯器實現自己去定義。各種編譯器對標準的實現也未必完全遵守(C還好,C++這種特別復雜的語言就很難做到完全遵守標准了),而且往往還增加一些自己的擴展,預定義宏之類的。這些都給跨編譯器編碼帶來麻煩。不過總體而言C是個比較單純的語言,除非程序員故意,一般搞不出太多給編譯器出難題的花樣。作為長期用C++的程序員,非常羨慕C代碼編譯時那種飛快的速度。
麻煩採納,謝謝!