您好,登錄后才能下訂單哦!
處理流程:
靜態(tài)鏈接與動態(tài)鏈接:
鏈接可以分為靜態(tài)鏈接(靜態(tài)庫)與動態(tài)鏈接(共享庫):
?靜態(tài)庫是代碼的歸檔,在使用靜態(tài)庫時是采用的復制代碼的方式。共享庫是可執(zhí)行文件的組成部分,在使用共享庫時是采用的提供代碼在共享庫的地址給可執(zhí)行文件的方式。
GCC編譯器:區(qū)分大小寫
gcc -E : 只做預處理,其它都不做,(.i)
gcc -S : 檢查語法錯誤等,生成匯編文件(.s)
gcc -c : 完成匯編,不鏈接(.o)
gcc -o : 修改目標文件名
gcc : 編譯+鏈接,生成可執(zhí)行文件,默認是 a.out
gcc -Wall : 生成所有的警告信息(提示代碼質量,少警告)
Gcc -D宏名: 條件編譯,用于版本選項開關
包含頭文件的方法:
宏定義與使用分析:
內置宏:
條件編譯使用:
條件編譯使得我們可以按不同的條件編譯不同的代碼段,因而可以產生不同的目標代碼
#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ù)倍
#和##運算符使用:
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。