2010年1月9日 星期六

Pragma once - 維基百科,自由的百科全書

Pragma once - 維基百科,自由的百科全書

Pragma once

維基百科,自由的百科全書

跳轉到: 導航, 搜尋
CC++ 程式語言中,#pragma once 是一個非標準但是被廣泛支援的前置處理符號,會讓所在的檔案在一個單獨的編譯中被include防範一次。以此方式,#pragma once 提供類似include防範的目的,但是擁有較少的程式碼且能避免名稱的碰撞。
請參考include防範裡其中一種狀況的範例或其他的使用方法。如下:
檔案「grandfather.h」
#pragma once

struct foo {
int member;
};
檔案「father.h」
#include "grandfather.h"
檔案「child.c」
#include "grandfather.h"
#include "father.h"

[編輯] 優缺點

使用#pragma once 代替 include 防範將加快編譯速度,因為這是一種高階的機制;編譯器會自動比對檔案名稱或inode而不需要在標頭檔去判斷 #ifndef#endif
另一方面,部份編譯器,例如GCC,也包含特別的程式碼來識別和有效率的管理 include 防範。[1]
此外,因為編譯器自己必須承擔管理 #pragma once,它不必定義新的指令名稱,例如在 include防範文章範例的 H_GRANDFATHER。這能排除名稱碰撞的風險,意思就是包含一個以上相同的標頭檔不會再有錯誤
然而,這種高階的管理有好也有壞;設計者必須依賴編譯器正確的管理 #pragma once。編譯器如果犯錯,例如沒有辨認出在相同檔案中的兩個不同符號連結名稱指標,此時編譯會錯誤。編譯器對於 #pragma once 可能包含相關的臭蟲 LCC-Win32 2004年 [2][3] 和 GCC 1998年[4] 2005年,GCC 文件中將 #pragma once 列為「已淘汰」的特性。[5]

[編輯] 外部連結

沒有留言: