在C語言標頭檔案裡我們如何應用#ifndef
舉個例子 我在led.h 標頭檔案裡這麼寫 #ifndef __LED_H #define __LED_H ....... ...... #endif 1 這樣寫是如何完成防止重複定義功能的 2 __LED_H 這個巨集定義我可以隨便命名嗎,還是這個#define後面的名字和 標頭檔案led.h 得名字村子某種命名約束 3 在應用標頭檔案中 ifdef 是如何公工作的
答案
編譯器讀到#ifndef __LED_H這一行時會檢查當前__LED_H這個字元是否已經被巨集定義了,如果是,則忽略其下文直到匹配的#endif;如果沒有被巨集定義,則繼續編譯其下文。這樣當這個標頭檔案第一次被#include時,編譯器發現_LED_H這個字元未被巨集定義,則編譯餘下的內容,第一句就將_LED_H這個字元巨集定義,則以後#include時,此標頭檔案就不會再被編譯了。
__LED_H這個名字可以任意取(其用來編譯時區分是否是第一次被#include),但不能跟別的標頭檔案中的定義重複。
!ifdef __LED_H 的意義跟上面的相同。ifdef表示如果定義了某巨集就編譯下文直到匹配的#endif,跟ifndef類似的條件編譯語句(邏輯正好相反)
ifdef這個巨集定義可以防止重複定義
但是如何完成的呢
1 我們在標頭檔案。h中寫了這句話,
#ifndef __LED_H #define __LED_H ....... ...... #endif如果有多個檔案引用了這個.h 檔案這多個檔案又包含在同一個檔案下。這樣我們的ifdef就起作用了。