1. 程式人生 > >gcc 源代碼分析-前端篇3

gcc 源代碼分析-前端篇3

com 初始 一個 語言 filename 名稱 分析 源碼 ng-

3. GCC怎樣函表示一個函數
對c語言來說。函數是其核心,全部的東西都在環繞著函數在轉。對於一個函數來說。它基本的一些特性例如以下:

1. 有一個返回值,在這裏我們沒有把返回值的函數覺得它的返回值是void;
2. 它有傳入的參數。而這個參數個數不確定。可多可少,也能夠沒有;
3. 它有一個函數名稱,這個名稱具有唯一性,也就是同一個project,不能有名稱一樣的多個函數。
4. 它有函數運行體;

對於函數來說,還是通過struct tree_decl結構來表示:
filename:函數所在文件名稱。
linenum: 函數所在的行號。
print_name: 函數名稱,asii 表示;
assembler_name: 函數名的內部名稱,asii表示;
name: 函數的名字。用一個struct tree_identifier結構來表示;
common::type 表示函數類型,這個實際上是一個tree_type的結構來表示。它的common::type表示函數的返回類型
它實際上就是在初始化時生成的表示數據類型的節點,假設是int型。它就是一個int 型節點;
它的values 成員記錄的是函數的參數。是一個struct tree_int_cst類型,通過它的chain把幾個參數串連起來。

對於這種一個源碼:
void main()
{


}
它最後轉成一棵語法樹,可是這個樹僅僅有一個節點,就是表示函數的節點,它實際上是一個struct tree_decl結構。它的name成員表示
函數的名稱,type 成員裏面既記錄了函數返回值。也記錄了函數的參數。

gcc 源代碼分析-前端篇3