gnu compiler collection的縮寫,一開始是c語言的編譯器,但現今可以支援多種語言的編譯工作,也支援了多個硬體平台的編譯。總而言之,主流的c語言編譯器就是這個gcc了。
這裡的gnu是乙個軟體專案名稱,開發了很多的應用程式。
對於.c檔案gcc當做c語言處理,g++(是gcc的c++編譯器)當做c++處理;對於.cpp檔案gcc和g++均當做c++處理;
預處理預處理主要解決的是將標頭檔案、巨集替換、條件編譯給處理掉,include標頭檔案之後,將標頭檔案的**插入了主**(處理的.c檔案),以及巨集的內容給替換在**檔案中,還有將注釋給處理掉。.c/cpp檔案得到.i檔案
編譯分為了編譯和彙編兩個過程
編譯器:對於c的話是直接gcc,對於c++就是g++;
編譯將源程式進行詞法和語法分析後,將高階語言指令轉換為了等效的組合語言,也就是.i檔案得到.s檔案。
a. 編譯預處理,讀取c程式,對其中偽指令和特殊符號進行處理
b. 編譯優化處理,將提高效率
彙編:將組合語言**翻譯成目標機器指令的過程,也就是.s檔案會得到.o檔案,得到一目標檔案,這裡的目標檔案包括了兩個段,**段和資料段。
編譯過後還有鏈結過程
因為在匯程式設計序生成的目標檔案不能被立刻執行,往往有著很多沒解決的問題,有些是檔案的函式,存在引用了其他原始檔的定義的函式或者是變數,所以就需要鏈結這個操作,就是將.o檔案給鏈結抽象上聚集在一起,這一步也是為了後面能夠生成可執行檔案。
一開始不太理解這個東西,在多次問和查詢之後,有了點理解
最後再貼下流程圖
什麼是編譯?什麼是鏈結?
1.一般來說,無論是c c 首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file。2.在編譯時編譯器需要的是語法的正確,函式與變數的宣告的正確。只要所有的語法正確,編譯器就可以編譯出中間目標檔案。一般來說,每個原始檔都應該對應於乙...
C C 什麼是定義?什麼是宣告?
什麼是定義?什麼是宣告?它們有何區別?舉個例子 a int i b extern int i 關於 extern,後面解釋 哪個是定義?哪個是宣告?或者都是定義或者都是宣告?我所教過的學生幾乎沒有一 人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!什麼是定義 所謂的定義就是 編譯器 ...
什麼是CC攻擊?
攻擊者借助 伺服器生成指向受害主機的合法請求,實現ddos和偽裝就叫 cc challengecollapsar cc主要是用來攻擊頁面的。大家都有這樣的經歷,就是在訪問論壇時,如果這個論壇比較大,訪問的人比較多,開啟頁面的速度會比較慢,訪問的人越多,論壇的頁面越多,資料庫壓力就越大,被訪問的頻率也...