c語言使用預編譯指令的正確姿勢!

2021-10-04 04:47:31 字數 1040 閱讀 2242

為什麼防止標頭檔案重複引用?

標頭檔案重複引用會報錯嗎?

其實標頭檔案的重複引用大多數情況下不會出現錯誤。那什麼情況會出錯呢?

小二,直接上**!

好嘞,客官您慢用!

5個檔案分別是a.h,a.c,b.h,b.c和hello.c。在hello中為了使用a.c和b.c分別加入a.h和b.h的標頭檔案。如下:

int num=3;

voida(

);#include

#include

"a.h"

voida(

)#include

"a.h"

voidb(

);#include

#include

"b.h"

voidb(

)#include

"a.h"

#include

"b.h"

#include

intmain()

通過gcc檢視預處理的生成檔案.i。

可以看到num被定義了兩次。所以當專案逐漸複雜,在.h中引入一些變數(什麼變數,有必要嗎?此處應該是鏈結)時會發生錯誤。這個地方值得一提的是,如果標頭檔案並未定義變數,多次引用並不會發生錯誤。也就是說多次的宣告不會報錯,多次的定義相同變數會報錯,而預編譯指令真正預防的問題是防止多次定義相同變數。(老話就是:乙個變數可以被宣告多次但是不能被多次定義)關於全域性變數(此處應該是鏈結)

如果標頭檔案只被宣告一次,那麼也就不存在被多次定義的問題了。預編譯指令使每個標頭檔案只被宣告一次,避免了相同變數被多次定義的問題。使用方法:

在*.h中加入**:

#ifndef a_h

#define a_h

#endif

C 預編譯指令

下面對c 中的預編譯指令進行介紹 1.define和 undef 用法 define debug undef debug define告訴編譯器,我定義了乙個debug的乙個符號,他類似乙個變數,但是它沒有具體的值,可以將它看為乙個符號而已。undef就是刪除這個符號的定義。如果符號debug沒定義...

c 的預編譯指令

c 預處理器指令是在編譯時呼叫的。預處理器指令 preprocessor directive 告訴c 編譯器要編譯哪些 並指出如何處理特定的錯誤和警告。c 預處理器指令還可以告訴c 編輯器有關 組織的資訊。1.定義符號和取消符號定義的預處理指令 define 和 undef 預處理指令都以 號開頭並...

聊聊C語言的預編譯指令include

include 相信大家不會陌生,在我們寫 時,開頭總會來一句 include include是幹嘛用的,很多教材都提到了,因此這裡不會再詳細解釋了,大概意思就是將 檔案需要用到的函式宣告 常量等包含到 檔案中。include不是c語言的關鍵字,而是屬於一種預編譯的指令,那麼預編譯又是個什麼東東,這...