C小加
厚德 博學 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
#pragma once 與 #ifndef 解析(轉(zhuǎn))
Posted on 2013-03-18 10:28
C小加
閱讀(6892)
評論(2)
編輯
收藏
引用
所屬分類:
C++和面向?qū)ο?/a>
轉(zhuǎn)自:
http://blog.csdn.net/slimfox/article/details/1565950
為了避免同一個文件被include多次,C/C++中有兩種方式,一種是#ifndef方式,一種是#pragma once方式。在能夠支持這兩種方式的編譯器上,二者并沒有太大的區(qū)別,但是兩者仍然還是有一些細微的區(qū)別。
方式一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些聲明語句
#endif
方式二:
#pragma once
... ... // 一些聲明語句
#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個文件不會被包含多次,也能保證內(nèi)容完全相同的兩個文件不會被不小心同時包含。當然,缺點就是如果不同頭文件的宏名不小心“撞車”,可能就會導致頭文件明明存在,編譯器卻硬說找不到聲明的狀況——這種情況有時非常讓人抓狂。
#pragma once則由編譯器提供保證:同一個文件不會被包含多次。注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內(nèi)容相同的兩個文件。帶來的好處是,你不必再費勁想個宏名了,當然也就不會出現(xiàn)宏名碰撞引發(fā)的奇怪問題。對應的缺點就是如果某個頭文件有多份拷貝,本方法不能保證他們不被重復包含。當然,相比宏名碰撞引發(fā)的“找不到聲明”的問題,重復包含更容易被發(fā)現(xiàn)并修正。
#pragma once方式產(chǎn)生于#ifndef之后,因此很多人可能甚至沒有聽說過。目前看來#ifndef更受到推崇。因為#ifndef受語言天生的支持,不受編譯器的任何限制;而#pragma once方式卻不受一些較老版本的編譯器支持,換言之,它的兼容性不夠好。也許,再過幾年等舊的編譯器死絕了,這就不是什么問題了。
我還看到一種用法是把兩者放在一起的:
#pragma once
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些聲明語句
#endif
看起來似乎是想兼有兩者的優(yōu)點。不過只要使用了#ifndef就會有宏名沖突的危險,所以混用兩種方法似乎不能帶來更多的好處,倒是會讓一些不熟悉的人感到困惑。
選擇哪種方式,應該在了解兩種方式的情況下,視具體情況而定。事實上,只要有一個合理的約定來避開缺點,我認為哪種方式都是可以接受的。而這個已經(jīng)不是標準或者編譯器的責任了,應當由程序員來搞定。
btw:我看到GNU的一些討論似乎是打算在GCC 3.4(及其以后?)的版本取消對#pragma once的支持。不過我手上GCC 3.4.2和GCC 4.1.1仍然支持#pragma once,甚至沒有deprecation warning。VC6及其以后版本亦提供對#pragma once方式的支持。看來這一特性已經(jīng)穩(wěn)定下來了。
Feedback
#
re: #pragma once 與 #ifndef 解析(轉(zhuǎn))
回復
更多評論
2013-03-18 11:30 by
augustheart
gcc已經(jīng)會報告pragma once的警告了。說什么記不清了,因為自從看到它報后就改用單純的ifndef方式了,如今都過去一年多了。最開始我也是pragma和ifndef一起用,但是已經(jīng)記不清為什么一起用了……
這轉(zhuǎn)的文章已經(jīng)很老了,現(xiàn)在gcc都4.72了。
#
re: #pragma once 與 #ifndef 解析(轉(zhuǎn))
回復
更多評論
2013-03-20 18:03 by
P
我想知道取消對#pragma once支持原因
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關文章:
#pragma once 與 #ifndef 解析(轉(zhuǎn))
C++任意類型轉(zhuǎn)換模板
自己實現(xiàn)的memcpy()代碼
學習筆記--空類,虛函數(shù)類,虛繼承類的空間大小
學習筆記--const的作用
學習筆記--main函數(shù)結(jié)束后的調(diào)用
3種交換變量值的方法
自己實現(xiàn)的strcpy()和strlen()代碼
自己實現(xiàn)的atof()和atoi()代碼
學習筆記--extern關鍵字
網(wǎng)站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © C小加
日歷
<
2012年3月
>
日
一
二
三
四
五
六
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
ACM小菜奮斗史 QQ:45716108 歡迎交友!
留言簿
(21)
給我留言
查看公開留言
查看私人留言
隨筆分類
(143)
C++和面向?qū)ο?17)
cocos2dx
JavaScript(1)
Linux(3)
NoSQL(3)
VC++(2)
操作系統(tǒng)(1)
解題報告(83)
模板(5)
設計模式(2)
數(shù)據(jù)結(jié)構和算法(12)
隨想人生(7)
網(wǎng)絡編程(7)
隨筆檔案
(145)
2013年7月 (1)
2013年5月 (1)
2013年4月 (2)
2013年3月 (4)
2012年12月 (3)
2012年11月 (1)
2012年9月 (5)
2012年8月 (6)
2012年7月 (1)
2012年6月 (1)
2012年5月 (8)
2012年4月 (6)
2012年3月 (25)
2012年2月 (11)
2012年1月 (12)
2011年12月 (10)
2011年11月 (46)
2011年9月 (1)
2011年4月 (1)
相冊
me
各大OJ入口
HDU
POJ
Ural
南陽理工學院(NYOJ)
近期比賽
近期比賽
信息網(wǎng)站
51CTO
ACM/ICPC信息站
CSDN論壇
GameRes
lkylky's blog
OGRE3D
OGRE大牛的bolg
UML軟件工程組織
開源社區(qū)
木牛
友情鏈接
陳玉's blog
侯颯颯's blog
開開甲's blog
小岳's blog
張云聰's blog
南陽理工學院ACM大牛,目前在百度工作
搜索
積分與排名
積分 - 488704
排名 - 43
最新評論
1.?re: 基本數(shù)據(jù)結(jié)構:鏈表(list)
評論內(nèi)容較長,點擊標題查看
--sanshai
2.?re: 一步一步寫二叉查找樹[未登錄]
非常詳細 因為有清晰的實例描述一下就懂了 感謝博主
--Lu
3.?re: 一步一步寫二叉查找樹[未登錄]
刪除操作沒有考慮如果刪除的是根節(jié)點要怎么辦吧?
--Andy
4.?re: 關于拷貝(復制)構造函數(shù)為什么不能用值傳遞
值傳遞過程有返回值嗎
--奚大坤123
5.?re: 一步一步寫二叉查找樹
調(diào)用Deletepri(root,x);進行刪除之后,root指向被刪除那個位置的節(jié)點,而不是原樹的根節(jié)點?
--胡廣
閱讀排行榜
1.?基本數(shù)據(jù)結(jié)構:鏈表(list)(63233)
2.?一步一步寫平衡二叉樹(AVL樹)(42749)
3.?C++實現(xiàn)單例模式(17926)
4.?優(yōu)秀博客推薦:各種數(shù)據(jù)結(jié)構與算法知識入門經(jīng)典(不斷更新)(16236)
5.?poj 1005 I Think I Need a Houseboat 解題報告(15832)
評論排行榜
1.?一步一步寫平衡二叉樹(AVL樹)(23)
2.?C++實現(xiàn)單例模式(15)
3.?大三下學期計劃(15)
4.?學習筆記--空類,虛函數(shù)類,虛繼承類的空間大小(9)
5.?標準C++的一些約定(9)
国产激情久久久久影院
|
91精品国产高清久久久久久io
|
久久婷婷激情综合色综合俺也去
|
精品国际久久久久999波多野
|
久久亚洲精品成人无码网站
|
人妻无码αv中文字幕久久琪琪布
|
狠狠综合久久综合中文88
|
亚洲欧美精品伊人久久
|
亚洲国产精品一区二区久久
|
婷婷久久综合九色综合98
|
久久精品视频网
|
国产91久久综合
|
无码任你躁久久久久久久
|
久久久久av无码免费网
|
久久精品国产清自在天天线
|
婷婷久久久亚洲欧洲日产国码AV
|
亚洲国产另类久久久精品小说
|
午夜天堂av天堂久久久
|
一级做a爱片久久毛片
|
午夜肉伦伦影院久久精品免费看国产一区二区三区
|
狠狠人妻久久久久久综合蜜桃
|
久久国产视屏
|
欧美亚洲色综久久精品国产
|
青青草国产精品久久久久
|
国产91久久综合
|
无码日韩人妻精品久久蜜桃
|
91亚洲国产成人久久精品网址
|
久久男人AV资源网站
|
少妇人妻88久久中文字幕
|
99久久精品免费看国产一区二区三区
|
免费久久人人爽人人爽av
|
嫩草伊人久久精品少妇AV
|
国产福利电影一区二区三区久久久久成人精品综合
|
午夜人妻久久久久久久久
|
国产成人久久精品二区三区
|
国内精品久久久久久久久电影网
|
99久久99这里只有免费费精品
|
久久久WWW成人
|
精品国产一区二区三区久久久狼
|
久久久久亚洲精品中文字幕
|
91久久精品91久久性色
|