防衛式聲明

標準格式:在頭文件中寫:

#ifndef -XXX-
#define -XXX-
.......
#endif


通過閱讀 GeekBand c++學習筆記——防衛式聲明的背後發現編譯器對頭文件進行了以下預處理

  1. 編譯器將處理掉所有註釋,以空格代替;
  2. 刪除#define,展開所有宏定義;
  3. 處理條件編譯指令#if、#ifdef、#elif、#else、#endif;
  4. 處理#include,展開被包含的頭文件(直接將頭文件複製進文件)
  5. 保留編譯器需要使用的#progma指令等等。

        編譯器還會做很多其他事情,但是從第四條可以看出,會將頭文件中寫的代碼直接複製進文件。那麼可以想象,如果有多份頭文件均不進行防衛式聲明,均包含了類似<iostream>這種內容很多的頭文件,經過預處理以後的文件,即便自己只寫了一行代碼cout,它包含的代碼量將是何其的龐大。這還不是最關鍵的問題,關鍵是頭文件中定義了一個變量,那麼多次包含該頭文件之後,就會產生重複定義的問題,那麼防衛式聲明其實防止重複聲明與定義。


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