五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Effective C++ 第二條 prefer const, enums and inlines to #define

2022-12-27 21:05 作者:九思519  | 我要投稿

使用const、enum定義常量而不用#define

在使用C++編程中如果我們需要定義一個(gè)常量c,在學(xué)習(xí)C語(yǔ)言的時(shí)候我們可能會(huì)保留#define C 1 這樣的習(xí)慣,這是一種宏替換,我們盡量要使用如下操作來(lái)代替這一操作

使用inline修飾函數(shù)而不是用#define

當(dāng)我們定義一個(gè)函數(shù)是使用函數(shù)f調(diào)用a,b中最大值的,這個(gè)時(shí)候不要用 #define CALL_WITH_MAX(a,b) f((a) > (b) ? (a):(b)),我們應(yīng)該這樣

這么做的好處與原因

要明白這個(gè)就要知道C/C++是如何從源文件(.c)轉(zhuǎn)換成可執(zhí)行文件的

源文件(.c)經(jīng)過(guò)預(yù)處理生存(.i)文件,這一階段源文件中的宏被替換為定義的內(nèi)容,具體如下

也就是計(jì)算機(jī)根本不知道A是什么,在預(yù)處理階段所有的A都被替換成了1,而const、enum是真正在內(nèi)存中有A這么個(gè)變量。預(yù)處理階段移除了#define的內(nèi)容進(jìn)行了宏替換,這里預(yù)處理會(huì)將stdio.h庫(kù)中使用的函數(shù)定義放進(jìn)來(lái),printf函數(shù)在stdio.h中的。

到這里你可能會(huì)奇怪,這不是都一樣嗎?代碼中的A被換成了1,但是一個(gè)文件可能有很多處,如果因?yàn)槟程幍?出了錯(cuò)誤,編譯的過(guò)程中報(bào)錯(cuò)顯示的是1而不是A,這樣就極其不方便你排查錯(cuò)誤的原因。

同理用#define 定義 CALL_WITH_MAX 也是這個(gè)道理,一切調(diào)用CALL_WITH_MAX(a,b) 都被替換成了 f((a) > (b) ? (a):(b)),而利用inline創(chuàng)建的 callWithMax是個(gè)真正的函數(shù),可以在符號(hào)表(symbol table)中查找到。


Effective C++ 第二條 prefer const, enums and inlines to #define的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
玉溪市| 郓城县| 普定县| 那曲县| 深水埗区| 惠安县| 水富县| 承德市| 开远市| 大姚县| 土默特右旗| 读书| 巴林左旗| 建平县| 邻水| 花莲县| 漳浦县| 乌兰察布市| 望奎县| 太仓市| 皋兰县| 喀什市| 东城区| 新昌县| 边坝县| 裕民县| 肇源县| 合江县| 昭平县| 丰顺县| 安化县| 云梦县| 南阳市| 易门县| 西藏| 固始县| 隆化县| 托里县| 乌兰浩特市| 马山县| 台中市|