這篇介紹宏和函數(shù)的區(qū)別。
宏是C語(yǔ)言預(yù)處理命令的一種。所謂宏定義,就是用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,如果在后面的代碼中出現(xiàn)了該標(biāo)識(shí)符,那么就全部替換成指定的字符串。其形式如下:
#define 宏名稱(chēng) 替換文本
宏
宏和函數(shù)的區(qū)別如下:
宏做的是簡(jiǎn)單的字符串替換(注意是字符串的替換,不是其他類(lèi)型參數(shù)的替換),而函數(shù)的參數(shù)的傳遞,參數(shù)是有數(shù)據(jù)類(lèi)型的,可以是各種各樣的類(lèi)型;
宏的參數(shù)替換是不經(jīng)計(jì)算而直接處理的,而函數(shù)調(diào)用是將實(shí)參的值傳遞給形參;
宏占用的是編譯的時(shí)間,而函數(shù)占用的是執(zhí)行時(shí)的時(shí)間。即宏是在編譯之前進(jìn)行的,先用宏體替換宏名,然后再編譯;而函數(shù)是編譯之后,在執(zhí)行時(shí),才調(diào)用的;
宏的參數(shù)是不占內(nèi)存空間的,因?yàn)橹皇亲鲎址奶鎿Q,而函數(shù)調(diào)用時(shí)的參數(shù)傳遞則是具體變量之間的信息傳遞,形參作為函數(shù)的局部變量,是占用內(nèi)存的;
函數(shù)的調(diào)用是需要付出一定的時(shí)空開(kāi)銷(xiāo)的,因?yàn)橄到y(tǒng)在調(diào)用函數(shù)時(shí),要保留現(xiàn)場(chǎng),然后轉(zhuǎn)入被調(diào)用函數(shù)去執(zhí)行,調(diào)用完,再返回主調(diào)函數(shù),此時(shí)再恢復(fù)現(xiàn)場(chǎng),這些操作在宏中是沒(méi)有的。
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145583 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67504 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73960
發(fā)布評(píng)論請(qǐng)先 登錄
功放和運(yùn)放到底是什么區(qū)別?
同時(shí)DSP2812的源文件,命名不同,到底有什么區(qū)別?
KEIL、uVision、MDK、KEIL C51、RealView它們到底有什么區(qū)別?
FPGA和CPLD到底有什么區(qū)別?求具體例子說(shuō)明
C語(yǔ)言函數(shù)中的傳值和傳指針到底有什么區(qū)別
CAN通訊中摩托羅拉格式與英特爾格式到底有什么區(qū)別
單端與差異數(shù)據(jù)傳輸到底有什么區(qū)別
宏和函數(shù)到底有什么區(qū)別
評(píng)論