編譯系統會根據
1. C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(1)編譯系統會根據擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
2. 編譯系統通常由哪幾個部分組成
一般說來,編譯程序主要由詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、代碼優化程序、目標代碼生成程序、信息表管理程序、錯誤檢查處理程序組成。
3. 編程語言(比如C語言、java)是怎麼被設計出來的設計的過程又是怎樣的
參考一些資料,可以看一些發展歷史。C語言歷史
早期的操作系統等系統軟體主要是用匯編語言編寫的,如UNIX操作系統。由於匯編語言
依賴於計算機硬體,程序的可讀性和可移植性都比較差。為了提高可讀性和可移植性,最好
改用高級語言,但一般高級語言難以實現匯編語言的某些功能,而匯編語言可以直接對硬體
進行操作,例如,對內存地址的操作、位(bit)操作等。人們設想能否找到一種既具有一般
高級語言特性,又具有低級語言特性的語言,集它們的優點於一身。於是,C語言就在這種
情況下應運而生了,之後成為國際上廣泛流行的計算機高級語言。它適合於作為系統描述語
言,即用來寫系統軟體,也可用來寫應用軟體。
C語言是在B語言的基礎上發展起來的,它的根源可以追溯到ALGOL 60。1960年出現的
ALGOL 60是一種面向問題的高級語言,它離硬體比較遠,不宜用來編寫系統程序,1963年英
國的劍橋大學推出了CPL(Combined Programming Language)語言。CPL語言在ALGOL 60的基
礎上接近硬體一些,但規模比較大,難以實現。1967年英國劍橋大學的Matin Richards對
CPL語言作了簡化,推出了BCPL(Basic Combined Programming Language)語言。1970年美國
貝爾實驗室的Ken Thompson以BCPL語言為基礎,又作了進一步簡化,它使得BCPL能擠壓在
8K內存中運行,這個很簡單的而且很接近硬體的語言就是B語言(取BCPL的第一個字母),並
用它寫了第一個UNIX操作系統,在DEC PDP-7上實現。1971年在PDP-11/20上實現了B語言,
並寫了UNIX操作系統。但B語言過於簡單,功能有限,並且和BCPL都是「無類型」的語言。
1972年至1973年間,貝爾實驗室的D.M.Ritchie在B語言的基礎上設計出了C語言(取BCPL的
第二個字母)。C語言既保持了BCPL和B語言的優點(精練,接近硬體),又克服了它們的缺點
(過於簡單,數據無類型等)。最初的C語言只是為描述和實現UNIX操作系統提供一種工具語
言而設計的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,
即UNIX第5版。原來的UNIX操作系統是1969年由美國的貝爾實驗室的K.Thompson和
D.M.Ritchie開發成功的,是用匯編語言寫的,這樣,Unix使分散的計算系統之間的大規
模聯網以及互聯網成為可能。
後來,C語言多次作了改進,但主要還是在貝爾實驗室內部使用。直到1975年UNIX第6版
公布後,C語言的突出優點才引起人們普遍注意。1977年出現了不依賴於具體機器的C語言編
譯文本《可移植C語言編譯程序》,使C移植到其它機器時所需做的工作大大簡化了,這也推
動了UNIX操作系統迅速地在各種機器上實現。例如,VAX,AT&T等計算機系統都相繼開發了
UNIX。隨著UNIX的日益廣泛使用,C語言也迅速得到推廣。C語言和UNIX可以說是一對孿生兄
弟,在發展過程中相輔相成。1978年以後,C語言已先後移植到大、中、小、微型機上,如
IBM System/370、Honeywell 6000和Interdata 8/32,已獨立於UNIX和PDP了。現在C語言已
風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一。
以1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表的UNIX第7版中的C編譯程序為
基礎,Brian W.Kernighan(柯尼漢)和Dennis M.Ritchie(里奇)合著了影響深遠的名著
《The C Programming Language》,常常稱它為『K&R』,也有人稱之為『K&R標准』或『白
皮書』(white book),它成為後來廣泛使用的C語言版本的基礎,但在『K&R』中並沒有定義
一個完整的標准C語言。為此,1983年,美國國家標准化協會(ANSl)X3J11 委員會根據C語言
問世以來各種版本對C的發展和擴充,制定了新的標准,稱為ANSI C,ANSI C比原來的標准C
有了很大的發展:K&R在1988年修改了他們的經典著作《The C Programming Language》,
按照ANSI C標准重新寫了該書。1987年,ANSI又公布了新標准——87 ANSI C。目前流行的C
編譯系統都是以它為基礎的。當時廣泛流行的各種版本C語言編譯系統雖然基本部分是相同
的,但也有一些不同。在微型機上使用的有Microsoft C(MS C),Borland Turbo C,Quick C
和AT&T C等,它們的不同版本又略有差異。到後來的Java、C++、C#都是以C語言為基礎發展
起來的。
4. 計算機高級語言的編譯系統按軟體分類來看是屬於________。
計算機高級語言的編譯系統按軟體分類來看是屬於系統軟體。
因為編譯軟體和操作系統屬於系森斗慎統軟體所有的軟體都是基於這些系統軟體才能運行的。編譯系統根據語言的規定編寫源程序,然後進行編譯、連接,生成可執行文件。
例如DOS操作系統加各類高級語言,如FORTRAN、PASCLL、C語言等就屬於這種類型介面平台,用於提供編譯任務輸入介面以及處理狀態信息輸出介面,並根據輸入的編譯任務生成任務名;
(4)編譯系統會根據擴展閱讀:
過程
接收輸入的編譯任務;根據所述編譯任務生成任務名;解析獲得所述任務名對應的源代碼;編譯所述銷伍源代碼,並輸出所述編譯任務的處理狀態信息。
上述技術方案中,通過介面平台接收編譯任務,由介面平台以任務名形式發起編譯請求,進行編譯,簡化了編譯輸入操作;處理狀態信息,通過介面平台實時提供給客戶端,簡化了編譯監控操作,大此敬大節約了人力資源。
參考資料來源:網路-編譯系統
5. C語言編譯器會編譯改變過的代碼,而不會編譯沒有改動的代碼。 我想知道它是怎麼判斷程序是否有唄修改過的
編譯器要記錄你的編譯生成文件,比如obj、exe等的生成日期,發現與相關的文件如.c源文件、obj等日期舊時則選擇對此部分重新編譯。
特別地,它記錄所有相關文件,比如你新修改了某頭文件.h,編譯系統會逐一比較所有使用這個.h文件的編譯結果,如果發現時間舊了就重新編譯它們。
6. C語言&變數是什麼意思
變數,與數學中的變數定義相同,都是一個可以隨時變化的量,即,你可以在任何時間對這個變數值進行變更
其次 &a是指a的地址,想int &a一般用於函數傳值
int ax(int a)和int ax(int &a)的區別在於
在第一個函數聲明中,傳進去的只是一個值,在ax函數中進行修改不會對調用ax函數的的函數中的參數有改變
而在第二個函數聲明中,傳進去的是地址本身,這樣的傳遞在ax中改變了a的值候,在調用ax函數的函數中的a的值會同步修改(即:ax函數和調用ax函數的函數,兩個共用一個變數)
7. 編譯系統詳細資料大全
編譯系統又稱為第二類編程環境開發者根據語言的規定編寫源程式,然後進行編譯、連線,生成執行檔,例如DOS作業系統加各類高級語言,如FORTRAN、PASCLL、C語言等就屬於這種類型介面平台,用於提供編譯任務輸入介面以及處理狀態信息輸出介面,並根據輸入的編譯任務生成任務名;編譯伺服器,用於解析所述任務名,獲得相應的原始碼,並進行編譯,同時產生所述編譯任務的處理狀態信息提供給所述介面平台。
基本介紹
- 中文名 :編譯系統
- 外文名 :Compiling system
- 分類1 :MTK分散式編譯系統
- 分類2 :DM2預編譯系統
- 分類3 :編譯系統CMake
過程
接收輸入的編譯任務;根據所述編譯任務生成任務名;解析獲得所述任務名對應的原始碼;編譯所述原始碼,並輸出所述編譯任務的處理狀態信息。上述技術方案中,通過介面平台接收編譯任務,由介面平台以任務名形式發起編譯請求,進行編譯,簡化了編譯輸入操作;處理狀態信息,通過介面平台實時提供給客戶端,簡化了編譯監控操作,大大節約了人力資源。MTK分散式編譯系統
眾所周知,MTK平台使用ARM ADS進行編譯,一千多個源檔案,單機需要四五十分鍾才能完成,如果機器開著防毒軟體,速度會更慢。為了提高編譯速度,可以把防毒軟體暫時停掉,但是效果不會太明顯。解決問題的根本做法是利用網內閑置的機器,搭建一個分散式系統,多台機器同時編譯,可以收到明顯效果。 本系統由注冊伺服器、編譯伺服器和客戶端組成。網內啟動一個注冊伺服器,多個編譯伺服器。在MTK6223平台上,單機new一次需要50分鍾的項目,使用10個編譯伺服器同時編譯,new一次需要13分鍾。模組編譯之前是在客戶端工作的,需要9分鍾,其中為了實現分散式編譯,壓縮原始碼佔用了2分鍾,檔案下載到編譯伺服器需要2分鍾。 從第一個模組編譯到最後link之前,10台機器僅用4分鍾就完成了1200個c檔案的編譯工作。最後的link是在本機進行的,幾十秒就完了。 我曾經試過18台機器同時編譯,1200個c檔案不到2分鍾就編譯完成了,當然下載時間需要3分鍾。對於開發人員來講,new一次不再是夢魘。 當然,不能無限制地增加編譯伺服器,要考慮檔案傳輸所消耗的時間。MTK平台檔案很多,需要由客戶端向伺服器分發。一般地,一個客戶端與十個伺服器聯合編譯可以達到理想效果。DM2預編譯系統
預編譯系統是DM2系統的重要組成部分。它支持在C程式中嵌入使用SQL語言,充分發揮語言數據類型豐富、處理方便靈活的優勢,又以SQL語言彌補高級語言難以描述資料庫操作的不足,為用戶提供了建立大型管理信息系統和處理復雜事務所需要的工作環境。 預編譯系統還支持互動式介面DM2-ISQL、套用開發工具集DM2-FORM、DM2-GRAPH、DM2-REPORT等工作環境。編譯系統CMake
CMake就像是我們在uni上使用的make一樣,是用來管理怎樣編譯一個project的。它的好處是: 1) 跨越多個作業系統平台,包括當前套用最廣泛的windows,unix(包括Mac OS X). 2) 採用BSD風格的協定開放原始碼。據我個人閱讀協定檔案,沒發現協定與兩句BSD協定有什麼不同。 3) 它可以支持具有非常復雜的路徑、庫依賴的程式的編譯。比如它支持編譯個程式:它依賴於很多的庫以及其它一些代碼檔案,而每一個庫又有很多子目錄。。。 4) 像很多Make一樣,它會對曾經編譯的檔案做一些cache一遍加速以後的編譯。 使用這個編譯系統的時候,需要每個目錄/子目錄創建一個名為CMakeLists.txt的檔案。 這個項目歷史也算是比較悠久了,從2000年就開始了。 當前使用這個編譯系統的項目:llvm/clang。。。 我就是從clang的原始碼里發現的,郵件列表裡有人推薦使用cmake,不要使用msvc的.sln檔案反編譯系統
高級語言源程式經過 編譯 變成執行檔,反編譯就是逆過程。 但是通常不能把執行檔變成高級語言原始碼,只能轉換成匯編程式。 計算機軟體反向工程(Reversepengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程式(可執行程式)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。 反編譯是一個復雜的過程,所以越是高級語言,就越難於反編譯,但目前還是有許許多多的反編譯軟體: VB: VBExplorer ;只能反編譯界面圖像,好像代碼不能完全反編譯 JAVA: JAD ;java的反編譯比較常見,所以反編譯比較完全C++ : eXeScopeSymbian編譯系統
所謂編譯,就是在編譯程式讀取源程式(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的 匯編代碼,再由匯編程式轉換為機器語言,並且按照作業系統對執行檔格式的要求連結生成可執行程式。 UNIX環境下的C編譯系統所遵循的也是這么一個一般的過程。值得注意的是這個過程並不是有某個單個程式完成的,而是有多個分別完成某一方面工作的程式組合完成的。這一設計思想同我們最初提到的UNIX系統軟體功能專一的特點是相符的。 歸納起來,可以將UNIX環境下C編譯系統的工作過程下圖所示。 C源程式頭檔案-->預編譯處理(cpp)-->編譯程式本身-->最佳化程式-->匯編程式-->連結程式-->執行檔 一般我們用命令來完成對源程式的編譯工作。此命令並不是一個二進制的可執行程式,而是一個shell命令檔案。它的工作就是依次調用我們上面所列出的各個完成某部分工作的具體程式,將指定的c源程式轉換成可執行的代碼。 在UNIX系統中,實現C源程式到執行檔的這一轉換過程的工具是。在大多數系統中實際上是一個shell命令檔案。有些系統中的C編譯程式可能並不叫而是其它的一個什麼名稱,如Sun工作站上常用的g等等。但這些都無關緊要。大多數系統中C編譯命令的用法基本上都是類似的。我們這里介紹的將以SVR4上的C編譯系統為基礎。 其中我們也要知道編譯系統也是一個系統軟體,而不是套用軟體。