#pragma once與 #ifndef的區(qū)別

為了避免同一個(gè)文件被include多次

1#ifndef方式

2#pragma once方式

在能夠支持這兩種方式的編譯器上,二者并沒(méi)有太大的區(qū)別,但是兩者仍然還是有一些細(xì)微的區(qū)別斋配。

方式一:

#ifndef __SOMEFILE_H__

#define __SOMEFILE_H__

... ... // 一些聲明語(yǔ)句

#endif

方式二:

#pragma once

... ... // 一些聲明語(yǔ)句

#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個(gè)文件不會(huì)被包含多次盗似,也能保證內(nèi)容完全相同的兩個(gè)文件不會(huì)被不小心同時(shí)包含俺亮。當(dāng)然,缺點(diǎn)就是如果不同頭文件的宏名不小心“撞車”罩润,可能就會(huì)導(dǎo)致頭文件明明存在玖翅,編譯器卻硬說(shuō)找不到聲明的狀況

#pragma once則由編譯器提供保證:同一個(gè)文件不會(huì)被包含多次。注意這里所說(shuō)的“同一個(gè)文件”是指物理上的一個(gè)文件割以,而不是指內(nèi)容相同的兩個(gè)文件金度。帶來(lái)的好處是,你不必再費(fèi)勁想個(gè)宏名了严沥,當(dāng)然也就不會(huì)出現(xiàn)宏名碰撞引發(fā)的奇怪問(wèn)題猜极。對(duì)應(yīng)的缺點(diǎn)就是如果某個(gè)頭文件有多份拷貝,本方法不能保證他們不被重復(fù)包含消玄。當(dāng)然跟伏,相比宏名碰撞引發(fā)的“找不到聲明”的問(wèn)題,重復(fù)包含更容易被發(fā)現(xiàn)并修正翩瓜。

由于編譯器每次都需要打開頭文件才能判定是否有重復(fù)定義受扳,因此在編譯大型項(xiàng)目時(shí),ifndef會(huì)使得編譯時(shí)間相對(duì)較長(zhǎng)奥溺,因此一些編譯器逐漸開始支持#pragma once的方式辞色。

方式一由語(yǔ)言支持所以移植性好,方式二 可以避免名字沖突

總結(jié)

·性能上的區(qū)別

使用 #ifndef 的話,編譯器每次看到#include這個(gè)文件都需要讀入文件相满,解析代碼层亿;

而使用#pragma once 編譯器根本不會(huì)重復(fù)打開文件, 大大提高了效率立美。

·編碼風(fēng)格上的區(qū)別

使用#pragma once的代碼簡(jiǎn)潔匿又,重要的是它避免了頭文件標(biāo)號(hào)(如_myheader_h_)的 重定義或者 #endif 包含范圍錯(cuò)誤的情況。

·語(yǔ)意上的區(qū)別

#pragma once是針對(duì)文件的建蹄,它告訴編譯器碌更,本文件只編譯一次。

#ifndef…#define…#endif 只是針對(duì)文件中的某一個(gè)標(biāo)號(hào)而言的洞慎,它能防止三個(gè)指令間包含的內(nèi)容的重復(fù)性處理痛单。就這一點(diǎn)而言,后者更靈活劲腿。

可移植性方面

#pragma once是微軟的開發(fā)工具中所使用的旭绒,如 msvc 等工具可以完好的支持;

#ifndef #define #endif是C++標(biāo)準(zhǔn)里面的一部分焦人,對(duì)于任何完好支持c/c++的編譯器都能使用挥吵。顯而易見,后者的可移植性更高花椭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忽匈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矿辽,更是在濱河造成了極大的恐慌丹允,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袋倔,死亡現(xiàn)場(chǎng)離奇詭異嫌松,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奕污,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門液走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嘱根,你說(shuō)我怎么就攤上這事巷懈《パ啵” “怎么了冈爹?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵频伤,是天一觀的道長(zhǎng)芝此。 經(jīng)常有香客問(wèn)我婚苹,道長(zhǎng),這世上最難降的妖魔是什么怎炊? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任结胀,我火速辦了婚禮,結(jié)果婚禮上糟港,老公的妹妹穿的比我還像新娘院仿。我一直安慰自己,他們只是感情好歹垫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布排惨。 她就那樣靜靜地躺著,像睡著了一般暮芭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上畜晰,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天凄鼻,我揣著相機(jī)與錄音,去河邊找鬼闰非。 笑死匈子,一個(gè)胖子當(dāng)著我的面吹牛虎敦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胚迫,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼唾那,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闹获!你這毒婦竟也來(lái)了期犬?” 一聲冷哼從身側(cè)響起龟虎,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鲤妥,失蹤者是張志新(化名)和其女友劉穎拱雏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铸抑,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年鹊汛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柒昏。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熙揍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤有梆,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布是尖,位于F島的核電站,受9級(jí)特大地震影響泥耀,放射性物質(zhì)發(fā)生泄漏饺汹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一兜辞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逸吵,春花似錦缝裁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)段多。三九已至衩匣,卻和暖如春粥航,著一層夾襖步出監(jiān)牢的瞬間琅捏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工递雀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柄延,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓缀程,卻偏偏與公主長(zhǎng)得像搜吧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杨凑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容