溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言的編譯預處理

發(fā)布時間:2020-08-01 12:13:25 來源:網絡 閱讀:1089 作者:少年不在了 欄目:編程語言

1、C程序的過程

C語言的編譯預處理

處理流程:
C語言的編譯預處理

靜態(tài)鏈接與動態(tài)鏈接:
C語言的編譯預處理

鏈接可以分為靜態(tài)鏈接(靜態(tài)庫)與動態(tài)鏈接(共享庫):
?靜態(tài)庫是代碼的歸檔,在使用靜態(tài)庫時是采用的復制代碼的方式。共享庫是可執(zhí)行文件的組成部分,在使用共享庫時是采用的提供代碼在共享庫的地址給可執(zhí)行文件的方式。
C語言的編譯預處理

GCC編譯器:區(qū)分大小寫

    gcc -E :  只做預處理,其它都不做,(.i)
    gcc -S :  檢查語法錯誤等,生成匯編文件(.s)
    gcc -c : 完成匯編,不鏈接(.o)
    gcc -o :  修改目標文件名
    gcc    :  編譯+鏈接,生成可執(zhí)行文件,默認是 a.out
    gcc -Wall :  生成所有的警告信息(提示代碼質量,少警告)
    Gcc -D宏名: 條件編譯,用于版本選項開關

包含頭文件的方法:
C語言的編譯預處理

宏定義與使用分析:
C語言的編譯預處理

內置宏:
C語言的編譯預處理

條件編譯使用:
 條件編譯使得我們可以按不同的條件編譯不同的代碼段,因而可以產生不同的目標代碼
  #if…#else…#endif被預編譯器處理;而if…else語句被編譯器處理,必然被編譯進目標代碼
 實際工程中條件編譯主要用于一下兩種情況:
  不同的產品線共用一份代碼;區(qū)分編譯產品的調試版和發(fā)布版
#error(#warning)和#line :
 #error用于生成一個編譯錯誤消息,并停止編譯
  用法: #error message (message不需要用雙引號包圍)
   #error編譯指示字用于自定義程序員特有的編譯錯誤消息類似的,#warning用于生成編譯警告,但不會停止編譯
 #line用于強制指定新的行號和編譯文件名,并對源程序的代碼重新編號
  用法: #line number filename (filename可省略)
   #line編譯指示字的本質是重定義__LINE__和__FILE__
#pragma預處理:
 #pragma GCC dependency 文件名 (已使用版本控制代替)
  把當前文件和指定文件之間建立依賴關系,如果當前文件最后修改時間比指定文件新,就沒問題,否則就產生警告
 #pragma GCC poison 標識符或關鍵字
  把后面的標識符或關鍵字禁止使用
 #pragma pack(數(shù)字)
  針對結構體的對齊補齊

Struct占用內存大小分析:
 第一個成員起始于0偏移處
 每個成員按其類型大小和指定對齊參數(shù)n中較小的一個進行對齊
  偏移地址和成員占用大小均需對齊
  結構體成員的對齊參數(shù)為其所有成員使用的對齊參數(shù)的最大值結構體總長度必須為所有對齊參數(shù)的整數(shù)倍

#和##運算符使用:
C語言的編譯預處理

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI