區(qū)別:
站在用戶的角度思考問題,與客戶深入溝通,找到望江網(wǎng)站設(shè)計(jì)與望江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋望江地區(qū)。
1、宏會(huì)在編譯器在對(duì)源代碼進(jìn)行編譯的時(shí)候進(jìn)行簡(jiǎn)單替換,不會(huì)進(jìn)行任何邏輯檢測(cè),即簡(jiǎn)單代碼復(fù)制而已。
2、宏進(jìn)行定義時(shí)不會(huì)考慮參數(shù)的類型。
3、參數(shù)宏的使用會(huì)使具有同一作用的代碼塊在目標(biāo)文件中存在多個(gè)副本,即會(huì)增長(zhǎng)目標(biāo)文件的大小。
4、參數(shù)宏的運(yùn)行速度會(huì)比函數(shù)快,因?yàn)椴恍枰獏?shù)壓棧/出棧操作。
5、參數(shù)宏在定義時(shí)要多加小心,多加括號(hào)。
6、函數(shù)只在目標(biāo)文件中存在一處,比較節(jié)省程序空間。
7、函數(shù)的調(diào)用會(huì)牽扯到參數(shù)的傳遞,壓棧/出棧操作,速度相對(duì)較慢。
8、函數(shù)的參數(shù)存在傳值和傳地址(指針)的問題,參數(shù)宏不存在。
宏是用于編譯器處理的,他在程序編譯時(shí),會(huì)在對(duì)應(yīng)位置展開成代碼。。,這就相當(dāng)于你在告訴編譯器,我想在這個(gè)位置加一些代碼,代碼的內(nèi)容已在宏中定義,請(qǐng)編譯器自己支找。。。,也就是說程序在運(yùn)行時(shí),早已變成了對(duì)應(yīng)位置上的代碼,此時(shí)已沒有宏的概念了。。。。
而函數(shù)則是運(yùn)行時(shí),調(diào)用。他不會(huì)在編譯時(shí),在對(duì)應(yīng)位置上加上函數(shù)代碼,只是加上一個(gè)函數(shù)入口指針。。。從這個(gè)入口去運(yùn)行一段代碼。。。運(yùn)行完了之后回到當(dāng)前位置繼續(xù)執(zhí)行。。。。
可以簡(jiǎn)單的認(rèn)為,宏是在編譯時(shí)上起作用,而函數(shù)是運(yùn)行時(shí)起作用。。。
上面是 宏 定義。
第一行 DEFINE...SUITE 是宏函數(shù)名,小括號(hào)里是 三個(gè) 形式參數(shù)。 定義為 下面第二行開始 含 續(xù)行號(hào)的 所有的行。 程序中出現(xiàn) DEFINE...SUITE 宏函數(shù)時(shí),均用 它的 定義句 做字符替代。
定義句替代宏函數(shù)時(shí),凡是有 三個(gè)形式參數(shù) 的地方,用 實(shí)際參數(shù) 做字符替代。
## 是 連接符,用于一個(gè)Token 與另 一個(gè)Token 的 連接,(Token 也可以是另外的宏,也可以不是)。
例子: 若形參_sym的實(shí)際參數(shù) 是 XYZ, 那么 _test_str_##_sym[] 變成 _test_str_XYZ[]。 這個(gè) _test_str_XYZ 是 static const char型 數(shù)組的名字。
后面還有個(gè) .name = _test_str_XYZ, 也是token的連接。