❶ 什麼是源程序,目標程序
源程序,是指未經編譯的,按照一定的程序設計語言規范書寫的,人類可讀的文本文件。通常由高級語言編寫。源程序可以是以書籍或者磁帶或者其他載體的形式出現,但最為常用的格式是文本文件,這種典型格式的目的是為了編譯出計算機可執行的程序。
目標程序,又稱為「目的程序」,為源程序經編譯可直接被計算機運行的機器碼集合,在計算機文件上以.obj作擴展名----由語言處理程序(匯編程序,編譯程序,解釋程序)將源程序處理(匯編,編譯,解釋)成與之等價的由機器碼構成的,計算機能夠直接運行的程序,該程序叫目標程序。
(1)源程序需要經過編譯嗎擴展閱讀:
源程序作用:生成目標程序;對軟體進行說明,即對軟體的編寫進行說明。為數不少的初學者,甚至少數有經驗的程序員都忽視軟體說明的編寫,因為這部分雖然不會在生成的程序中直接顯示,也不參與編譯。
目標程序作用:目標程序在許多編程工具中都有作用。計算機並不能直接地接受和執行用高級語言編寫的源程序,源程序在輸入計算機時,通過"翻譯程序"翻譯成機器語言形式的目標程序,計算機才能識別和執行。這種"翻譯"通常有兩種方式,即編譯方式和解釋方式。
參考資料來源:網路-目標程序
參考資料來源:網路-源程序
❷ C語言的源程序必須通過什麼和什麼才能被計算機執行
編譯和鏈接。
每一個C語言程序必須要經過編譯和鏈接才能被計算機執行,編譯是將C源碼翻譯成機器碼,鏈接是將將二進制目標文件裝配成一個具有特定格式的二進制可執行文件,比如Windows平台上是PE格式,一般以.exe為擴展名。
一個C語言程序從源碼到計算機系統可以執行,更細致的劃分為:預處理——編譯——匯編——鏈接。預處理是對C語言源碼進行文本處理,編譯階斷是將C源碼經C編譯器生成匯編代碼,匯編階斷是將匯編代碼經匯編器生成二進制機器碼文件。這兩個合攏起來,籠統的可以叫做編譯階斷。
❸ 簡述將源程序編譯成可執行程序的過程
一個源程序到一個可執行程序的過程:預編譯、編譯、匯編、鏈接。其中,編譯是主要部分,其中又分為六個部分:詞法分析、語法分析、語義分析、中間代碼生成、目標代碼生成和優化。
預編譯:主要處理源代碼文件中的以「#」開頭的預編譯指令。處理規則如下:
1、刪除所有的#define,展開所有的宏定義。
2、處理所有的條件預編譯指令,如「#if」、「#endif」、「#ifdef」、「#elif」和「#else」。
3、處理「#include」預編譯指令,將文件內容替換到它的位置,這個過程是遞歸進行的,文件中包含其他文件。
4、刪除所有的注釋,「//」和「/**/」。
5、保留所有的#pragma 編譯器指令,編譯器需要用到他們,如:#pragma once 是為了防止有文件被重復引用。
6、添加行號和文件標識,便於編譯時編譯器產生調試用的行號信息,和編譯時產生編譯錯誤或警告是能夠顯示行號。
(3)源程序需要經過編譯嗎擴展閱讀:
編譯過程中語法分析器只是完成了對表達式語法層面的分析,語義分析器則對表達式是否有意義進行判斷,其分析的語義是靜態語義——在編譯期能分期的語義,相對應的動態語義是在運行期才能確定的語義。
其中,靜態語義通常包括:聲明和類型的匹配,類型的轉換,那麼語義分析就會對這些方面進行檢查,例如將一個int型賦值給int*型時,語義分析程序會發現這個類型不匹配,編譯器就會報錯。
❹ 一個C語言源程序經過編譯後就可以執行了 這句話對嗎
對的,C語言是先編譯後執行,一般只要不出錯誤,編譯完就可以執行力。有時候還要考慮是否跨平台。
❺ 在vc環境中,一個c語言源程序要經過編輯、編譯、和什麼後才能執行
連接
編譯是生成目標代碼
和相關庫一起連接後 生成可執行文件
才能執行
❻ 用c語言編寫的源程序需要用編譯程序先編譯成由機器語言組成的目標程序,在經過( )後才能得到可執行程序
源代碼需經過編譯和鏈接,才可生成可執行文件。
由匯編程序生成的目標文件並不能立即就被執行,其中可能還有許多沒有解決的問題。 例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變數或者函數調用等);在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。
鏈接程序的主要工作就是將有關的目標文件彼此相連接,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠誒操作系統裝入執行的統一整體。
根據開發人員指定的同庫函數的鏈接方式的不同,鏈接處理可分為兩種:
(1)靜態鏈接
在這種鏈接方式下,函數的代碼將從其所在地靜態鏈接庫中被拷貝到最終的可執行程序中。這樣該程序在被執行時這些代碼將被裝入到該進程的虛擬地址空間中。靜態鏈接庫實際上是一個目標文件的集合,其中的每個文件含有庫中的一個或者一組相關函數的代碼。
(2) 動態鏈接
在此種方式下,函數的代碼被放到稱作是動態鏈接庫或共享對象的某個目標文件中。鏈接程序此時所作的只是在最終的可執行程序中記錄下共享對象的名字以及其它少量的登記信息。在此可執行文件被執行時,動態鏈接庫的全部內容將被映射到運行時相應進程的虛地址空間。動態鏈接程序將根據可執行程序中記錄的信息找到相應的函數代碼。
對於可執行文件中的函數調用,可分別採用動態鏈接或靜態鏈接的方法。使用動態鏈接能夠使最終的可執行文件比較短小,並且當共享對象被多個進程使用時能節約一些內存,因為在內存中只需要保存一份此共享對象的代碼。但並不是使用動態鏈接就一定比使用靜態鏈接要優越。在某些情況下動態鏈接可能帶來一些性能上損害。
❼ 什麼是源程序和目標程序
源程序也叫源碼,就是最開始編寫的程序,計算機並不能識別,需要經過編譯生成目標程序。
目標程序是能夠被計算機識別執行的,比如我們在網上下載的軟體,例如QQ,迅雷,這一類軟體都是目標程序,都是經過編譯的,商業公司一般不會發布源碼,源碼涉及到商業機密。
大家可以看看下面對兩者的區分:
1 .源程序,是指未經編譯的,按照一定的程序設計語言規范書寫的,人類可讀的文本文件。通常由高級語言編寫。源程序可以是以書籍或者磁帶或者其他載體的形式出現,但最為常用的格式是文本文件,這種典型格式的目的是為了編譯出計算機可執行的程序。將人類可讀的程序代碼文本翻譯成為計算機可以執行的二進制指令,這種過程叫做編譯,由各種編譯器來完成。一般用高級語言編寫的程序稱為「源程序」。
2. 目標程序,又稱為「目的程序」,為源程序經編譯可直接被計算機運行的機器碼集合,在計算機文件上以.obj作擴展名----由語言處理程序(匯編程序,編譯程序,解釋程序)將源程序處理(匯編,編譯,解釋)成與之等價的由機器碼構成的,計算機能夠直接運行的程序,該程序叫目標程序。目標代碼盡管已經是機器指令,但是還不能運行,因為目標程序還沒有解決函數調用問題,需要將各個目標程序與庫函數連接,才能形成完整的可執行程序。
❽ 用高級語言編寫的源程序必須經過編譯,產生目標程序後才能運行,這句話對嗎為什麼
目標程序不能運行,必須再經過連接成可執行文件才能運行。
而且像java 和c#的程序編譯後也不是目標程序。
❾ 匯編語言的源程序需要編譯嗎
匯編語言不是機器語言,肯定要先翻譯成機器語言(.obj文件),再連接成可執行文件才能被計算機執行。
如果是裸機,可以不用連接。