pragma once及相關知識

2021-06-16 07:13:22 字數 1086 閱讀 7604

#pragma once

這是乙個比較常用的指令,只要在標頭檔案的最開始加入這條指令就能夠保證標頭檔案被編譯一次  

#pragma once用來防止某個標頭檔案被多次include,#ifndef,#define,#endif用來防止某個巨集被多次定義。  #pragma once是編譯相關,就是說這個編譯系統上能用,但在其他編譯系統不一定可以,也就是說移植性差,不過現在基本上已經是每個編譯器都有這個定義了。  

#ifndef,#define,#endif這個是c++語言相關,這是c++語言中的巨集定義,通過巨集定義避免檔案多次編譯。所以在所有支援c++語言的編譯器上都是有效的,如果寫的程式要跨平台,最好使用這種方式  

#pragma   語言符號字串語言符號字串是給出特有編譯器指令和參量的字串行。數字符號(#)必須是包含編譯指示行中的第乙個非空白字元。空白字元可分開數字符號(#)和單詞pragma。  

作用:  為了避免同乙個檔案被include多次  

1 #ifndef方式  

2 #pragma once方式  

在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。  

方式一:   #ifndef __somefile_h__  #define __somefile_h__  ... ... // 一些宣告語句  #endif  

方式二:  #pragma once  ... ... // 一些宣告語句  

#ifndef的方式依賴於巨集名字不能衝突,這不光可以保證同乙個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。當然,缺點就是如果不同標頭檔案的巨集名不小心「撞車」,可能就會導致標頭檔案明明存在,編譯器卻硬說找不到宣告的狀況  

#pragma once則由編譯器提供保證:同乙個檔案不會被包含多次。注意這裡所說的「同乙個檔案」是指物理上的乙個檔案,而不是指內容相同的兩個檔案。帶來的好處是,你不必再費勁想個巨集名了,當然也就不會出現巨集名碰撞引發的奇怪問題。對應的缺點就是如果某個標頭檔案有多份拷貝,本方法不能保證他們不被重複包含。當然,相比巨集名碰撞引發的「找不到宣告」的問題,重複包含更容易被發現並修正。  方式一由語言支援所以移植性好,方式二 可以避免名字衝突

pragma once含義及用法

pragma once是乙個比較常用的c c 雜注,只要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次。pragma once是編譯器相關的,有的編譯器支援,有的編譯器不支援,具體情況請檢視編譯器api文件,不過現在大部分編譯器都有這個雜注了。ifndef,define,endif是...

SQLite相關知識及語句

一.sqlite 知識點 1.sqlite管理工具 ubuntu sqlite database browser windows sqlite3 二.常用sqlite語句 1.查詢person表第10 20條資料 select from person limit 9,11 9表開始位置,11表示連續...

指標理解及相關知識

引言 c語言中一種重要的資料型別就是指標,指標是c語言的特色之一。正確靈活地運用指標,可以使程式編寫簡潔,緊湊,高效。利用指標變數可以有效地表示各種複雜的資料結構,如佇列 queue 棧 stack 鍊錶 linked table 樹 tree 圖 graph 等等,正是由於複習資料結構,發現當時c...