日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#pragma once 与 #ifndef比较分析

發(fā)布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #pragma once 与 #ifndef比较分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為了避免同一個文件被include多次,C/C++中有兩種方式,一種是#ifndef方式,一種是#pragma once方式。在能夠支持這兩種方式的編譯器上,二者并沒有太大的區(qū)別,但是兩者仍然還是有一些細(xì)微的區(qū)別。
方式一:

#ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些聲明語句 #endif

方式二:

#pragma once... ... // 一些聲明語句

#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個文件不會被包含多次,也能保證內(nèi)容完全相同的兩個文件不會被不小心同時包含。當(dāng)然,缺點就是如果不同頭文件的宏名不小心“撞車”,可能就會導(dǎo)致頭文件明明存在,編譯器卻硬說找不到聲明的狀況——這種情況有時非常讓人抓狂。 #pragma once則由編譯器提供保證:同一個文件不會被包含多次。注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內(nèi)容相同的兩個文件。帶來的好處是,你不必再費勁想個宏名了,當(dāng)然也就不會出現(xiàn)宏名碰撞引發(fā)的奇怪問題。對應(yīng)的缺點就是如果某個頭文件有多份拷貝,本方法不能保證他們不被重復(fù)包含。當(dāng)然,相比宏名碰撞引發(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就會有宏名沖突的危險,所以混用兩種方法似乎不能帶來更多的好處,倒是會讓一些不熟悉的人感到困惑。 選擇哪種方式,應(yīng)該在了解兩種方式的情況下,視具體情況而定。事實上,只要有一個合理的約定來避開缺點,我認(rèn)為哪種方式都是可以接受的。而這個已經(jīng)不是標(biāo)準(zhǔn)或者編譯器的責(zé)任了,應(yīng)當(dā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)定下來了。


本文來自 slimfox 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/slimfox/article/details/1565950?utm_source=copy

總結(jié)

以上是生活随笔為你收集整理的#pragma once 与 #ifndef比较分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。