❶ C 程序源代碼每次運行都要編譯連接才行嗎
不用,只要沒有修改,一次編譯連接後,可直接運行生成的exe文件即可
如果修改過了,那麼就只能重新編譯連接了
❷ 為什麼要對C源程序進行編譯、鏈接
首先要說的是C語言屬於高級語言,不能直接被計算機識別而執行,所以需要一些操作來轉化。。一開始是編譯預處理,對宏,包含指令,編譯指令等進行處理,然後是詞法語法分析,將源代碼翻譯成中間代碼(一般是匯編),接著優化代碼,,然後將中間代碼翻譯成機器語言(目標文件),機器語言是計算機的基層語言,能被計算機直接識別。。接著鏈接目標文件,生成可以執行文件。。。大概就是這樣。。詳細的LZ可看這個總結。。http://bbs.zdnet.com.cn/thread-1614727-1-1.html
❸ c語言寫完代碼後怎麼運行
在C語言寫完代碼後,需要通過編譯器將源代碼編譯成可執行文件,然後在相應的操作系統中運行這個可執行文件。
C語言是一種需要編譯的編程語言,它的源代碼需要被轉換成機器碼才能在計算機上執行。這個過程通常分為兩個步驟:編譯和鏈接。
1. 編譯:編譯器將C語言源代碼(.c文件)轉換成目標文件(通常是.o文件或.obj文件),這個文件包含了源代碼轉換成的機器碼,但是還不能直接執行,因為它可能還依賴於其他目標文件或庫。在這個階段,編譯器還會檢查源代碼中的語法錯誤。
2. 鏈接:鏈接器將一個或多個目標文件以及可能需要的庫文件合並成一個可執行文件(在Windows系統中通常是.exe文件,在Unix/Linux系統中沒有特定的擴展名)。這個可執行文件包含了程序運行所需的所有機器碼和其他資源。
例如,如果你在Linux系統中使用GCC編譯器,你可以通過以下命令來編譯和運行C語言程序:
bash
gcc -o hello_world hello_world.c # 編譯
./hello_world # 運行
這里,“gcc”是GNU編譯器集合中的C語言編譯器,“-o hello_world”指定輸出文件名為“hello_world”(在Linux中,如果不指定輸出文件名,GCC會默認生成一個名為“a.out”的可執行文件),“hello_world.c”是源代碼文件。運行可執行文件時,需要在前面加上“./”來表示當前目錄。
如果你在Windows系統中使用Visual Studio等集成開發環境(IDE),編譯和運行的過程通常會被IDE自動化。你只需要點擊“運行”或“調試”按鈕,IDE就會自動完成編譯、鏈接和運行的過程。
請注意,雖然這里只介紹了最基本的編譯和運行過程,但實際的軟體開發中可能還需要考慮很多其他因素,比如編譯器選項、多文件編譯、庫的使用、錯誤處理和調試等。
❹ 用高級語言編寫的源程序必須經過__ ___轉化為等價的二進制代碼程序,才能夠在計算機中運行。
編譯和鏈接。
編譯:
1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。
2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。
編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
(4)源代碼必須經過編譯和鏈接擴展閱讀
源程序中的單詞符號經掃描器分析,一般產生二元式:單詞種別;單詞自身的值。單詞種別通常用整數編碼,如果一個種別只含一個單詞符號,那麼對這個單詞符號,種別編碼就完全代表它自身的值了。若一個種別含有許多個單詞符號,那麼,對於它的每個單詞符號,除了給出種別編碼以外,還應給出自身的值。
詞法分析器一般來說有兩種方法構造:手工構造和自動生成。手工構造可使用狀態圖進行工作,自動生成使用確定的有限自動機來實現。
❺ 用c語言編寫的源程序需要用編譯程序先編譯成由機器語言組成的目標程序,在經過( )後才能得到可執行程序
源代碼需經過編譯和鏈接,才可生成可執行文件。
由匯編程序生成的目標文件並不能立即就被執行,其中可能還有許多沒有解決的問題。 例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變數或者函數調用等);在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。
鏈接程序的主要工作就是將有關的目標文件彼此相連接,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠誒操作系統裝入執行的統一整體。
根據開發人員指定的同庫函數的鏈接方式的不同,鏈接處理可分為兩種:
(1)靜態鏈接
在這種鏈接方式下,函數的代碼將從其所在地靜態鏈接庫中被拷貝到最終的可執行程序中。這樣該程序在被執行時這些代碼將被裝入到該進程的虛擬地址空間中。靜態鏈接庫實際上是一個目標文件的集合,其中的每個文件含有庫中的一個或者一組相關函數的代碼。
(2) 動態鏈接
在此種方式下,函數的代碼被放到稱作是動態鏈接庫或共享對象的某個目標文件中。鏈接程序此時所作的只是在最終的可執行程序中記錄下共享對象的名字以及其它少量的登記信息。在此可執行文件被執行時,動態鏈接庫的全部內容將被映射到運行時相應進程的虛地址空間。動態鏈接程序將根據可執行程序中記錄的信息找到相應的函數代碼。
對於可執行文件中的函數調用,可分別採用動態鏈接或靜態鏈接的方法。使用動態鏈接能夠使最終的可執行文件比較短小,並且當共享對象被多個進程使用時能節約一些內存,因為在內存中只需要保存一份此共享對象的代碼。但並不是使用動態鏈接就一定比使用靜態鏈接要優越。在某些情況下動態鏈接可能帶來一些性能上損害。