❶ C語言代碼編譯成的是機器碼,那麼怎麼實現可移植性呢
C語言寫的代碼編譯成了機器碼,與編譯器有關,與當前的電腦的CPU沒有關系
有個概念叫交叉編譯,我們做嵌入式的,就靠這個工作了
也就是在PC上編譯的機器碼,下載到其他的晶元裡面,讓它在這個晶元里運行
只要其他的電腦也支持同樣的編譯器產生的機器碼,就可以一致到它上面
❷ 在C語言中,完成C源文件編輯後到生成執行文件的步驟是什麼
在C語言中,完成C源文件編輯後到生成執行文件的步驟是:
預編譯
處理有#標識的代碼,如將include的文件進行拷貝、#define的條件編譯等等!
編譯
編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編,對目標代碼的生成進行的優化,翻譯成機器指令。生成的文件叫目標文件。
鏈接
把目標文件和所需要的庫,鏈接成為可執行文件。
❸ C語言源程序到運行程序經過哪幾個步驟
1、預處理
在這一階段,源碼中的所有預處理語句得到處理,例如:#include語句所包含的文件內容替換掉語句本身,所有已定義的宏被展開。
根據#ifdef,#if等語句的條件是否成立取捨相應的部分,預處理之後源碼中不再包含任何預處理語句。
GCC預處理階段可以生成.i的文件,通過選項-E可以使編譯器在預處理結束時就停止編譯。例如:gcc -E -o hello.i hello.c
2、編譯
這一階段,編譯器對源碼進行詞法分析、語法分析、優化等操作,最後生成匯編代碼。這是整個過程中最重要的一步,因此也常把整個過程稱為編譯。
可以通過選項-S使GCC在進行完編譯後停止,生成.s的匯編程序。例如:gcc -S -o hello.s hello.c
3、匯編
這一階段使用匯編器對匯編代碼進行處理,生成機器語言代碼,保存在後綴為.o的目標文件中。
當程序由多個代碼文件構成時,每個文件都要先完成匯編工作,生成.o目標文件後,才能進入下一步的鏈接工作。
目標文件已經是最終程序的某一部分了,只是在鏈接之前還不能執行。可以通過-c選項生成目標文件:gcc -c -o hello.o hello.c
4、鏈接
經過匯編以後的機器代碼還不能直接運行。為了使操作系統能夠正確載入可執行文件,文件中必須包含固定格式的信息頭,還必須與系統提供的啟動代碼鏈接起來才能正常運行,這些工作都是由鏈接器來完成的。gcc -o hello hello.c
5、運行:執行.EXE文件,得到運行結果。
❹ C語言編寫好代碼後,怎麼編譯,最後生成可執行文件
材料/工具:vc6.0
1、打開c語言編輯工具,在工具中寫入程序的源代碼。
❺ 我們所寫的每條c語句,經過編譯最終都轉化成二進制的機器指令為什麼對
C語言中的注釋是不會轉化為二進制的。
第一句話,注意「每條c語句」,c語句是不包含注釋,所以正確。
第二句話,「每條可執行語句和非執行語句」,顯然注釋語句也被包含在其中,所以錯誤。
這種題就是玩了個文字游戲
❻ C語言代碼編譯成的是機器碼,那麼怎麼實現可移植性呢
C語言代碼編譯成的是機器碼,通常不能在不同指令系統的機器上運行。
我遇到過同樣的機器,同樣的機器碼,同樣的操作系統,也就是原來在本機編好的若干程序,突然運行不了了(出錯),必須重新編譯後才能運行。因為微軟動態鏈接庫里的子程序號碼「更新」了。
如果編譯成半成品機器碼,或者類似obj,到運行的機器上再由附加的解釋器解釋(或編譯器鏈接),則可以運行。這就是所謂的「跨平台」「移植」「嵌入」。
❼ 請問c語言的源程序被編譯後的代碼是機器碼嗎
首先語言和被編譯成的代碼沒有直接關系。有把Java編譯成機器碼的編譯器也有把C語言編譯成Java位元組碼的編譯器。
機器碼只是CPU直接認讀的編碼,不等於和硬體打交道的。操作硬體是你通過程序操作CPU做到的。操作系統只不過是別人寫的程序而已,說到底還是程序。
❽ c語言編譯後的是什麼東西
C/C++編譯連接後,生成的exe文件都是二進制的機器碼
快和慢的簡單概念就是做同樣的一件事情,一個用時少,一個用時多
也就是一個用的指令周期少,一個用的指令周期多
❾ C語言編譯後是生成匯編代碼還是直接生成機器代碼
不會是這兩種語言代碼,而是編譯後直接生成二進制文件(.obj文件),再通過連接器鏈接成二進制文件(.exe/.dll/.ocx/.sys等)