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)
久久综合久久伊人
|
亚洲午夜精品久久久久久人妖
|
亚洲精品国产字幕久久不卡
|
要久久爱在线免费观看
|
久久久久人妻一区精品色
|
久久久精品国产sm调教网站
|
久久久av波多野一区二区
|
色综合久久88色综合天天
|
国产一区二区久久久
|
99久久亚洲综合精品成人
|
国内精品久久久久影院薰衣草
|
国内精品久久国产大陆
|
久久精品人人做人人爽电影
|
国产精品熟女福利久久AV
|
亚洲中文字幕久久精品无码APP
|
久久se精品一区精品二区
|
久久精品成人欧美大片
|
久久精品免费大片国产大片
|
精品久久8x国产免费观看
|
亚洲国产成人乱码精品女人久久久不卡
|
精品久久久噜噜噜久久久
|
久久这里的只有是精品23
|
久久精品国产99久久丝袜
|
日韩一区二区久久久久久
|
97久久精品午夜一区二区
|
亚洲va久久久噜噜噜久久男同
|
无码精品久久一区二区三区
|
国产91久久综合
|
国产成人精品久久亚洲高清不卡
|
精品久久久久中文字幕日本
|
人妻少妇久久中文字幕
|
一本色道久久88精品综合
|
久久精品国产2020
|
囯产极品美女高潮无套久久久
|
亚洲伊人久久综合影院
|
亚洲国产精品无码久久青草
|
色综合久久88色综合天天
|
丁香五月综合久久激情
|
国产女人aaa级久久久级
|
久久久久人妻一区精品
|
人妻无码久久精品
|