C語言 宏和函數 個人對編譯鏈接的理解

宏和函數

1、宏是簡單的字符串替換,在引用宏的時候先用宏替換宏名,然後在編譯。

函數是編譯之後執行時再調用。所以宏佔用的是編譯的時間,函數是佔用的執行的時間。

宏在編譯之前進行,即先用宏體替換宏名,然後再編譯。
2、宏的參數不佔內存空間,函數調用的時候參數是佔用內存的,而宏函數太多太長時,調用就會使代碼增長。
3、宏的參數不受數據類型約束,函數參數傳遞時有數據類型的要求。
4、函數調用時需要時空開銷,宏不需要。

對編譯鏈接的理解:
1、編譯分爲編譯和彙編。
編譯:將C語言代碼轉換爲彙編語言。在預處理階段又分爲頭文件展開、去註釋、宏替換和條件編譯
將.c/.h文件轉換成.s文件
使用的gcc命令是gcc -S
彙編:將彙編語言轉換爲二進制代碼
將.s文件轉換爲.o文件
使用的gcc文件是gcc -c
2、鏈接:將全部二進制程序鏈接爲可執行程序,分爲動態鏈接和靜態鏈接。
將.o文件轉換爲可執行程序
使用的gcc命令是gcc
理解不夠到位,僅供參考。

發佈了38 篇原創文章 · 獲贊 21 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章