C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別
C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別
pragma once 之前一直用的很好,今天和同事的配合中發(fā)現(xiàn)自己沒(méi)有真正理解pragma once。
原因:同事喜歡把公共的頭文件通過(guò)生成后事件復(fù)制到一個(gè)公共的include文件夾中。
摘抄:
#ifndef方式: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ 1 ... ... // 一些聲明語(yǔ)句 #endif
#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個(gè)文件不會(huì)被包含多次,也能保證內(nèi)容完全相同的兩個(gè)文件不會(huì)被不小心同時(shí)包含。當(dāng)然,缺點(diǎn)就是如果不同頭文件的宏名不小心“撞車”,可能就會(huì)導(dǎo)致頭文件明明存在,編譯器卻硬說(shuō)找不到聲明的狀況
#pragma方式
#pragma once ... ... // 一些聲明語(yǔ)句
#pragma once 是個(gè)預(yù)處理指令,在頭文件的最開(kāi)始加入這條指令表示:這個(gè)頭文件只被編譯一次 #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)并修正。
總結(jié): 1. #ifndef 由語(yǔ)言支持所以移植性好,#pragma 可以避免名字沖突
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- C語(yǔ)言編程技巧 關(guān)于const和#define的區(qū)別心得
- c++ 盡量不要使用#define 而是用const、enum、inline替換。
- c++ const引用與非const引用介紹
- C++中的類型轉(zhuǎn)換static_cast、dynamic_cast、const_cast和reinterpret_cast總結(jié)
- C/C++中static,const,inline三種關(guān)鍵字詳細(xì)總結(jié)
- C++中const的實(shí)現(xiàn)機(jī)制深入分析
- C/C++中宏定義(#define)
- C/C++中的typedef和#define詳解
- C++中const與#define的利弊分析
相關(guān)文章
VC基于ADO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了VC基于ADO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)的方法,較為詳細(xì)的分析了VC使用ADO操作數(shù)據(jù)庫(kù)的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟
因?yàn)閂SCode免費(fèi)且好用,可以安裝各種插件,本文主要介紹了VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12C++編寫實(shí)現(xiàn)圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++編寫實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Visual?Studio?2022?配置?PCL?1.12.1?的問(wèn)題小結(jié)
這篇文章主要介紹了Visual?Studio?2022?配置?PCL?1.12.1?的經(jīng)驗(yàn)總結(jié)分享,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++ using namespace std 用法深入解析
以下是對(duì)C++中using namespace std的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-07-07C語(yǔ)言中字符和字符串處理(ANSI字符和Unicode字符)
這篇文章主要介紹了C語(yǔ)言與C++中字符和字符串處理(ANSI字符和Unicode字符)的詳細(xì)內(nèi)容,非常的全面,這里推薦給大家,希望大家能夠喜歡。2015-03-03