我一直在頭文件中使用警衛一段時間,我理解爲什麼他們被使用的唯一原因是在編譯時啓用這個(頭文件有警衛正在考慮中)的單個包含。C頭文件只在頭文件中使用,但不在.c文件中。爲什麼?
我想知道是否有使用頭衛兵的其他任何原因,他們爲什麼沒有在.c文件中使用,如果用於.c文件也衛兵會發生什麼?
Ans。從下面的回覆中收集。
通常所有的定義進入.c文件,並且頭文件(.h文件)包含所有的聲明。包含.c文件不是一個好習慣。
爲了在編譯時只將一個可用於.c文件的聲明與一個翻譯單元相關聯(因此,如果有兩個或多個需要鏈接的庫,即我們有兩個或更多個翻譯單元);標頭守衛幫助包含頭文件ONLY ONCE。
因爲預處理程序階段甚至在編譯文件以獲取對象(.o擴展名)文件之前發生這種情況。預處理器階段替換整個宏,幷包含相關數據,只允許包含一次.h文件。
如果你編寫'#include「foo.h''兩次,那麼內容foo.h將包含兩次。這就是爲什麼你需要守衛。現在假設你寫了「bar.c」,並且你告訴你的構建腳本由於某種原因編譯了兩次。第一次編譯它會生成'bar.o',第二次編譯時它會再次覆蓋'bar.o'。這就是爲什麼你不需要對源文件進行任何防範的原因。 – Brandin