爲什麼在.h文件中使用#ifndef CLASS_H和#define CLASS_H?

一般在.h文件中都會看到

#ifndef FILE_H
#define FILE_H

/* ... Declarations etc here ... */

#endif
那麼爲什麼要在.h文件中這麼聲明呢?

這是一種防止頭文件被多次包含的預處理技術,由於各種原因可能是有問題的。在編譯項目時,編譯每個.cpp文件(通常)。簡單來說,這意味着編譯器會把你的.cpp文件,打開任何文件#included,將它們全部連接成一個海量文本文件,然後執行語法分析,最後將它轉換成一些中間代碼,優化/執行其他任務,最後生成目標架構的彙編輸出。因此,如果#included一個.cpp文件的文件多次,則編譯器將附加文件內容兩次,因此如果該文件中有定義,你會收到一個編譯器錯誤,告訴你重新定義了一個變量。FILE_H當編譯過程中的預處理器步驟處理文件時,首次到達其內容時,前兩行將檢查是否已爲預處理器定義。如果沒有,它將定義FILE_H並繼續處理它和指令之間的代碼#endif下一次該文件的內容被預處理器看到時,檢查FILE_H將是假的,所以它將立即掃描#endif並繼續。這樣可以防止重新定義錯誤。它將定義並繼續處理它和指令之間的代碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章