您的位置 首页 kreess

程序編譯的四個過程

C語言編譯過程分成四個步驟: 1,由.c文件到.i文件,這個過程叫預處理 2,由.i文件到.s文件,這個過程叫編譯 3,由.s文件到.o文件,這個過程叫匯編 4,由.o文件

C語言編譯過程分成四個步驟:

1,由.c文件到.i文件,這個過程叫預處理

2,由.i文件到.s文件,這個過程叫編譯

3,由.s文件到.o文件,這個過程叫匯編

4,由.o文件到可執行文件,這個過程叫鏈接

用gcc查看預處理過程(假設源文件叫hello.c)

gcc -o hello.i hello.c -E

然後用 vi hello.i 即可查看生成的預處理文件

按ESC 輸入:$ 跳到預處理文件 可看到hello.c源碼

宏的本質:預處理階段的單純的替換

預處理階段,不考慮C語法

在成功編譯之後,就進入瞭鏈接階段。在這裡涉及到一個重要的概念:函數庫(可以這麼理解就是不帶main()函數的.cpp生成的)。

可以重新查看這個小程序,在這個程序中並沒有定義”cout”的函數(準確說cout不是函數,cout卻很獨特:既不是函數,似乎也不是C++特別規定出來的像if,for一類有特殊語法的“語句”,其實說到底還是函數調用,不過這函數有些特殊,用的是運算符重載,確切地說是重載瞭“<<”運算符。這裡如果用pritf()函數說明會更好,暫且當做函數理解吧)實現,且在預編譯中包含進的”iostream”中也隻有該函數的聲明,而沒有定義函數的實現,那麼,是在哪裡實現”cout”函數的呢?系統把這些函數實現都被做到名為stdc++的庫文件中去瞭,在沒有特別指定時,g++會到系統默認的搜索路徑”/usr/lib”下進行查找,也就是鏈接到stdc++庫函數中去,這樣就能實現函數”cout”瞭,而這也就是鏈接的作用。

轉自C++ —— C++程序編譯的四個過程

今天我的分享就到這裡瞭~希望能對你有幫助!別忘瞭點關註和贊同喲~

嵌入式物聯網需要學的東西真的非常多,不少人因為學的路線不對、內容不對頭而和高薪offer擦肩而過,甚至有些老鐵壓根都不知道要學什麼……讓人捉急……

分享一波自己整理的學習資源吧,基本上要學的內容都有,150多G。點擊這裡找小助理0元領取:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部