C語言的編譯過程和GCC編譯參數


C語言的編譯一般有三個步驟:

  1. 預編譯:

gcc -E -o a.e a.c

預編譯a.c文件,生成的目標文件名為a.e

預編譯就是將include包含的頭文件內容替換到C文件中,同時刪除代碼中沒用的注釋

示例:

//main.c

#include <stdio.h>

#include "sum.h"

int main(){

  int m = 6;

  int n = 5;

  int result = sum(m,n);  printf("hello\n%\n",result);

//sum.h

int sum(int x,int y);

運行之后結果為:

第一步就是這樣的啦!

2 . 編譯

gcc -S -o a.s a.e

將a.e翻譯成一個ASCII匯編語言文件a.s.

3 .鏈接

gcc -o a a.s

這行命令告訴gcc對源程序a.o進行鏈接,生成可執行程序a

gcc 沒有任何參數,表示就是鏈接

GCC編譯器的基本選項如下表:

類型 說明
-E 預處理后即停止,不進行編譯、匯編及連接
-S 編譯后即停止,不進行匯編及連接
-c 編譯或匯編源文件,但不進行連接
-o file 指定輸出文件file

C語言的include頭文件

  1.  include是要告訴編譯器,包含頭文件
  2. 在C語言中,任何的庫函數調用都需要包含頭文件
  3. 頭文件也相當於一個文檔聲明
  4. 如果把main函數放在第一個文件中,而把自定義函數放在第二個文件中,那么就需要在第一個文件中聲明函數原型
  5. 如果把函數原型包含在一個頭文件中,那么就不用每次使用函數的時候都聲明其原型了,把函數聲明放進頭文件中是個好習慣!
  6. 頭文件可以不需要編譯
  7. 可以查看具體的聲明
  8. 頭文件加上實現文件的o文件提交給使用者即可,不需要知道源代碼
  9. o文件預先編譯,所以整個項目編譯時,會大大提高編譯的時間 。
  10. 當一個文件(A.c文件)依賴於頭文件(b.h)時,如果b.c編譯之后形成的b.o文件重新編譯后,a.o的文件不需要重新編譯
  11. 可以極大降低手工復制,粘貼的錯誤幾率

頭文件的注意事項:

  1. <頭文件>,表示讓C語言編譯器在系統目錄(即gcc編譯器的include目錄下)下尋找相關的頭文件
  2. “頭文件”,表示讓C語言編譯器在用戶當前目錄下尋找相關的頭文件
  3. 如果是使用了C語言庫函數的需要的頭文件,那么一定是#include<>
  4. 如果是使用了用戶自定義的頭文件,那么一定是#include“”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM