C C 中 pragma once的使用

2021-09-08 20:20:23 字數 1001 閱讀 4028

在c/c++中,為了避免同乙個檔案被include多次,有兩種方式:一種是#ifndef方式,一種是#pragma once方式(在標頭檔案的最開始加入)。

#ifndef some_unique_name_here

#define some_unique_name_here

//contents of the header

...#endif

//some_unique_name_here

#pragma once

//contents of the header

...

#ifndef的是方式是受c/c++語言標準支援。#ifndef方式依賴於巨集名不能衝突。它不光可以保證同乙個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。缺點是如果不同標頭檔案中的巨集名不小心」碰撞」,可能就會導致你看到標頭檔案明明存在,編譯器卻硬說找不到宣告的狀況。由於編譯器每次都需要開啟標頭檔案才能判定是否有重複定義,因此在編譯大型專案時,#ifndef會使得編譯時間相對較長,因此一些編譯器逐漸開始支援#pragma once的方式。

#pragma once一般由編譯器提供保證:同乙個檔案不會被包含多次。這裡所說的」同乙個檔案」是指物理上的乙個檔案,而不是指內容相同的兩個檔案。無法對乙個標頭檔案中的一段**作#pragma once宣告,而只能針對檔案。此方式不會出現巨集名碰撞引發的奇怪問題,大型專案的編譯速度也因此提供了一些。缺點是如果某個標頭檔案有多份拷貝,此方法不能保證它們不被重複包含。在c/c++中,#pragma once是乙個非標準但是被廣泛支援的方式。

#pragma once方式產生於#ifndef之後。#ifndef方式受c/c++語言標準的支援,不受編譯器的任何限制;而#pragma once方式有些編譯器不支援(較老編譯器不支援,如gcc 3.4版本之前不支援#pragmaonce),相容性不夠好。#ifndef可以針對乙個檔案中的部分**,而#pragma once只能針對整個檔案。

ifndef和 pragma once的不同

為了避免同乙個檔案被include多次,c c 中有兩種方式,一種是 ifndef方式,一種是 pragma once方式。在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。方式一 ifndef somefile h define somefile h 一些宣告...

pragma once與 ifndef的區別

為了避免同乙個檔案被include多次 1 ifndef方式 2 pragma once方式 在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。方式一 ifndef somefile h define somefile h 一些宣告語句 endif 方式二 pr...

pragma once與 ifndef的區別

為了避免同乙個檔案被include多次 1 ifndef 方式2 pragma once方式 在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。方式一 ifndef somefile h define somefile h 一些宣告語句 endif 方式二 pr...