在標頭檔案中加入#ifndef或#ifdef等巨集定義,是為了防止重複宣告。
我們知道,標頭檔案一般是用來宣告的,會被其他的原始檔和標頭檔案include,當被多個檔案include的時候就會造成重複宣告。 為了使得只宣告一次,引入前面所說的巨集定義,一般以檔名大寫和_來當巨集的名字。
這個巨集是給預處理器用的,通常預處理變數用大寫,所以這些巨集定義都用大寫。為了方便,一般將大寫的檔名作為預處理器變數,其實在#ifndef後面加什麼都都可以,用檔名只是為了好區分。它只是用來定義乙個預處理器變數。
在乙個大的軟體工程裡面,可能會有多個檔案同時包含乙個標頭檔案,當這些檔案編譯鏈結成乙個可執行檔案時,就會出現大量重定義的錯誤。在標頭檔案中實用#ifndef #define #endif能避免標頭檔案的重定義。
方法:例如要編寫標頭檔案test.h
在標頭檔案開頭寫上兩行:
1
2
#ifndef _test_h
#define _test_h//一般是檔名的大寫
標頭檔案結尾寫上一行:#endif
這樣乙個工程檔案裡同時包含兩個test.h時,就不會出現重定義的錯誤了。
分析:當第一次包含test.h時,由於沒有定義_test_h,條件為真,這樣就會包含(執行)#ifndef _test_h
和#endif
之間的**,當第二次包含test.h時前面一次已經定義了_test_h
,條件為假,#ifndef _test_h
和#endif
之間的**也就不會再次被包含,這樣就避免了重定義了。主要用於防止重複定義巨集和重複包含標頭檔案
1
恰似你一低頭的溫柔,嬌弱水蓮花不勝寒風的嬌羞, 我的心為你悸動不休。 --mingfuyan
預編譯標頭檔案的作用
今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled header file debug ...
C 預編譯標頭檔案stdafx h作用
許多初學 vc 的朋友也許都為那麼乙個問題困擾過 為什麼所有的 cpp 都必須 include stdafx.h 也許請教了別的高手之後,他們會告訴你,這是預編譯頭,必須包含。可是,這到底 是為什麼呢?預編譯頭有什麼用呢?這得從頭檔案的編譯原理講起。其實標頭檔案並不神秘,它的全部作用,就是把自己的 ...
預編譯標頭檔案
stdafx.h標頭檔案的作用 今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled he...