這篇介紹宏和函數的區別。
宏是C語言預處理命令的一種。所謂宏定義,就是用一個標識符來表示一個字符串,如果在后面的代碼中出現了該標識符,那么就全部替換成指定的字符串。其形式如下:
#define 宏名稱 替換文本
宏
宏和函數的區別如下:
宏做的是簡單的字符串替換(注意是字符串的替換,不是其他類型參數的替換),而函數的參數的傳遞,參數是有數據類型的,可以是各種各樣的類型;
宏的參數替換是不經計算而直接處理的,而函數調用是將實參的值傳遞給形參;
宏占用的是編譯的時間,而函數占用的是執行時的時間。即宏是在編譯之前進行的,先用宏體替換宏名,然后再編譯;而函數是編譯之后,在執行時,才調用的;
宏的參數是不占內存空間的,因為只是做字符串的替換,而函數調用時的參數傳遞則是具體變量之間的信息傳遞,形參作為函數的局部變量,是占用內存的;
函數的調用是需要付出一定的時空開銷的,因為系統在調用函數時,要保留現場,然后轉入被調用函數去執行,調用完,再返回主調函數,此時再恢復現場,這些操作在宏中是沒有的。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
183文章
7644瀏覽量
145571 -
函數
+關注
關注
3文章
4417瀏覽量
67501 -
代碼
+關注
關注
30文章
4967瀏覽量
73960
發布評論請先 登錄
相關推薦
熱點推薦
KEIL、uVision、MDK、KEIL C51、RealView它們到底有什么區別?
KEIL、uVision、MDK、KEIL C51、RealView它們到底有什么區別,又有什么聯系?
發表于 07-01 09:08
C語言函數中的傳值和傳指針到底有什么區別
我們可能聽過C語言中的傳值和傳指針,在其他語言中,也有傳引用一說,那么他們到底有什么區別呢?如果你還不能準確地分辨,就該好好了解一下了。
宏和函數到底有什么區別
評論