C 語言中的引用防護 (include guard)

高等 C 語言

簡介

字串

指標與陣列

函數

結構

物件導向

記憶體

檔案

錯誤處理

巨集處理

C 與組合語言

資料結構

動態字串

動態陣列

鏈結串列

雜湊表

開發環境

Make

Cygwin

MinGW

DevC++

wxDevC++

編譯器

gcc 編譯器

TinyCC 編譯器

LCC 編譯器

應用主題

CGI 程式

GNU 程式

視窗程式

影像處理

練習題

訊息

相關網站

參考文獻

最新修改

簡體版

English

在開發 C 語言專案時,我們通常在每一個標頭檔的開始與結尾,使用 #ifndef #define #endif 的方式防止重複引用,其語法通常如下所示。

#ifndef XXX_H 
#define XXX_H
...
 
#endif

舉例而言,以下是我們所撰寫的一個標頭檔 Str.h,我們可以使用 #ifndef STR_H #define STR_H …#endif 來避免重複引用 Str.h 所造成的編譯錯誤,其程式碼如下所示。

#ifndef STR_H
#define STR_H
 
typedef struct {
  char *s;
} Str;
 
extern void StrAppend(String*, char *);
 
#endif

這種方式是許多 C 語言初學者所不知道的,由於沒有與其他人一同開發過專案,而且寫程式時也都是自己一個人寫,就很難知道要使用這樣的技巧,這種技巧稱為「引用防護」(include guard)。

在某些 C 語言編譯器中,提供了 #pragma once 這樣的編譯指引,可以避免冗長的引用防護撰寫語法,但是為了可攜性的緣故,通常我們還是會加上引用防護,而不是只撰寫 #pragma once,因為畢竟寫一行的 #pragma 與寫三行的引用防護並沒有差太多。

在 Objective C 這個語言中,由為內建就有引用防護機制,因此就不需要撰寫這樣的語法了。

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License