您好,登錄后才能下訂單哦!
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ì)本站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。