
? ?
??博客昵稱:博客小夢(mèng)
??最喜歡的座右銘:全神貫注的上吧?。?!
??作者簡介:一名熱愛C/C++,算法等技術(shù)、喜愛運(yùn)動(dòng)、熱愛K歌、敢于追夢(mèng)的小博主!
??博主小留言:哈嘍!??各位CSDN的uu們,我是你的博客好友小夢(mèng),希望我的文章可以給您帶來一定的幫助,話不多說,文章推上!歡迎大家在評(píng)論區(qū)嘮嗑指正,覺得好的話別忘了一鍵三連哦!??
前言??
? ? 哈嘍各位友友們??,我今天又學(xué)到了很多有趣的知識(shí),現(xiàn)在迫不及待的想和大家分享一下!??我僅已此文,和大家分享你是真的“C”——宏與函數(shù)的英雄本色。都是精華內(nèi)容,可不要錯(cuò)過喲?。。??????
一、何為宏?
在進(jìn)行宏和函數(shù)的對(duì)比時(shí),我們先了解一下什么是宏。
#define 定義宏
#define 機(jī)制包括了一個(gè)規(guī)定,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常稱為宏(macro)或定義宏(define macro)。
下面是宏的申明方式:
#define name( parament-list ) stuff
其中的 parament-list 是一個(gè)由逗號(hào)隔開的符號(hào)表,它們可能出現(xiàn)在stuff中。
注意:
- 參數(shù)列表的左括號(hào)必須與name緊鄰。
-
如果兩者之間有任何空白存在,參數(shù)列表就會(huì)被解釋為stuff的一部分。
舉個(gè)栗子:
#define SQUARE( x ) x * x
二、宏和函數(shù)的對(duì)比: ??
屬性 | #define定義宏 | 函數(shù) |
---|---|---|
代碼長度 | 每次使用時(shí),宏代碼都會(huì)被插入到程序中。除了非常小的宏之外,程序的長度會(huì)大幅度增長 | 函數(shù)代碼只出現(xiàn)于一個(gè)地方;每次使用這個(gè)函數(shù)時(shí),都調(diào)用那個(gè)地方的同一份代碼 |
執(zhí)行速度 | 更快 | 存在函數(shù)的調(diào)用和返回的額外開銷,所以相對(duì)慢一些 |
操作符優(yōu)先級(jí) | 宏參數(shù)的求值是在所有周圍表達(dá)式的上下文環(huán)境里,除非加上括號(hào),否則鄰近操作符的優(yōu)先級(jí)可能會(huì)產(chǎn)生不可預(yù)料的后果,所以建議宏在書寫的時(shí)候多些括號(hào)。 | 函數(shù)參數(shù)只在函數(shù)調(diào)用的時(shí)候求值一次,它的結(jié)果值傳遞給函數(shù)。表達(dá)式的求值結(jié)果更容易預(yù)測(cè) |
帶有副作用的參數(shù) | 參數(shù)可能被替換到宏體中的多個(gè)位置,所以帶有副作用的參數(shù)求值可能會(huì)產(chǎn)生不可預(yù)料的結(jié)果 | 函數(shù)參數(shù)只在傳參的時(shí)候求值一次,結(jié)果更容易控制 |
參數(shù)類型 | 宏的參數(shù)與類型無關(guān),只要對(duì)參數(shù)的操作是合法的,它就可以使用于任何參數(shù)類型 | 函數(shù)的參數(shù)是與類型有關(guān)的,如果參數(shù)的類型不同,就需要不同的函數(shù),即使他們執(zhí)行的任務(wù)是相同的。 |
調(diào)試 | 宏是不方便調(diào)試的 | 函數(shù)是可以逐語句調(diào)試的 |
遞歸 | 宏是不能遞歸的 | 函數(shù)是可以遞歸的 |
數(shù)據(jù)類型作為參數(shù) | 宏可以讓類型作為參數(shù) | 函數(shù)不能將類型作為參數(shù) |
三、 #undef
這條指令用于移除一個(gè)宏定義。文章來源:http://www.zghlxwxcb.cn/news/detail-406553.html
#undef NAME
//如果現(xiàn)存的一個(gè)名字需要被重新定義,那么它的舊名字首先要被移除。
總結(jié)撒花??
? ?本篇文章旨在分享宏與函數(shù)的對(duì)比的相關(guān)知識(shí)點(diǎn)。希望大家通過閱讀此文有所收獲!??如果我寫的有什么不好之處,請(qǐng)?jiān)谖恼孪路浇o出你寶貴的意見??。如果覺得我寫的好的話請(qǐng)點(diǎn)個(gè)贊贊和關(guān)注哦~??????文章來源地址http://www.zghlxwxcb.cn/news/detail-406553.html
到了這里,關(guān)于你是真的“C”——宏與函數(shù)的英雄本色的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!