什麼是c c 編譯

2022-05-06 07:36:08 字數 1034 閱讀 3942

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主要是用來攻擊頁面的。大家都有這樣的經歷,就是在訪問論壇時,如果這個論壇比較大,訪問的人比較多,開啟頁面的速度會比較慢,訪問的人越多,論壇的頁面越多,資料庫壓力就越大,被訪問的頻率也...