宏和函數:
1、宏是簡單的字符串替換,在引用宏的時候先用宏替換宏名,然後在編譯。
函數是編譯之後執行時再調用。所以宏佔用的是編譯的時間,函數是佔用的執行的時間。
宏在編譯之前進行,即先用宏體替換宏名,然後再編譯。
2、宏的參數不佔內存空間,函數調用的時候參數是佔用內存的,而宏函數太多太長時,調用就會使代碼增長。
3、宏的參數不受數據類型約束,函數參數傳遞時有數據類型的要求。
4、函數調用時需要時空開銷,宏不需要。
對編譯鏈接的理解:
1、編譯分爲編譯和彙編。
編譯:將C語言代碼轉換爲彙編語言。在預處理階段又分爲頭文件展開、去註釋、宏替換和條件編譯
將.c/.h文件轉換成.s文件
使用的gcc命令是gcc -S
彙編:將彙編語言轉換爲二進制代碼
將.s文件轉換爲.o文件
使用的gcc文件是gcc -c
2、鏈接:將全部二進制程序鏈接爲可執行程序,分爲動態鏈接和靜態鏈接。
將.o文件轉換爲可執行程序
使用的gcc命令是gcc
理解不夠到位,僅供參考。