c語言是怎麼實現跨平台編譯的
㈠ c語言是如何跨平台的
c語言能跨平台主要因為各個平台包括DOS,Windows,linux,UNIX等都有c編譯器,只要源代碼相同,編譯器編譯出來的二進制文件就會實現相同的功能(不包括跨平台的系統調用)。但是這些二進制文件不一樣,Linux中的可執行文件一般情況下都不能在Windows中運行,因為他們是兩個完全不同的操作系統,有不同的內核,不同的系統調用。但編譯器會根據不同的平台生成不同的代碼,使二進制文件能在專有的平台中運行,並且實現相同的功能。
跨硬體平台也是類似,在各種平台上,如x86,x86_64,Sparc,ppc,Motorola等都有相應的編譯器。編譯器會把相同的c語言代碼編譯成不同的機器指令,這樣就可以實現跨平台了。
總而言之,跨平台主要是靠各個平台上的編譯器。
㈡ C語言到底有沒有跨平台性
C語言本來就是跨平台的,不過是「源碼級」跨平台。本來就是存在針對linux、windows的不同的編譯器。所以有C語言「一次編寫,到處編譯」,Java是「一次編譯,到處運行」的說法。
如C++創始人酸溜溜的說法,JVM造了一個新的平台,讓所有Java程序只能在這個平台上運行,而C和C++的代碼可以在幾十個不同的平台上運行,從這個角度而言,C和C++是跨平台的,而Java不是
㈢ c語言為什麼能跨平台或是如何跨平台的
c語言能跨平台是因為各個平台有相應的c編譯器,只要源代碼相同,編譯器編譯出來的二進制文件就會實現相同的功能,但是這些二進制文件本身是不一樣的
exe就是2進制的,但不完全是原來程序的代碼,還包括了windows系統的一些代碼
科普一下,C最早是出現在Unix下的,Windows那都是後話了,C出現的時候Windows還沒開發出來呢。
C有個比較特別的稱呼,叫中級語言,因為它有高級語言的特性又能跟底層硬體很好的交互所以才有這么個說法。DOS時代在C裡面嵌上一段匯編直接從並口讀個數上來那是很流行的,現在沒見誰在VC裡面這么干吧。Windows也不讓啊。想訪問硬體怎麼也得通過驅動。
說遠了,C在多種平台下可以實現代碼級的共享,跨平台就需要重新編譯了。
但是,我也見過有的軟體是可以在多種平台上運行了,可能有什麼特別的技術,可以先識別一下操作系統,再運行相應的代碼。這個應該是在編譯的時候有特殊的技巧。
C編譯、連接器網上有現成的代碼,一般不是很專業的技術人員沒有去研究它。我一直把玩編譯原理的視為天人,有能力把編譯原理那本書看完的就很不容易了,再要能領會其中精要那就成才了,能把龍書虎書鯨書都搞明白的那就是一流專家了。
㈣ C語言是不是跨平台的
回答可以說是也不是。
C的源代碼是跨平台的而編譯後的目標文件和可執行文件就不是跨平台的。
因為針對不同的平台會用不同的編譯器來編譯和鏈接同樣的源代碼。
當然如果你的代碼里有針對某種特定平台的代碼的話(比如Windows API調用),那麼用針對其它平台的編譯器就會出錯。
一般來說如果想寫真正跨平台的源代碼會用#define 來實現有條件的編譯。