爲什麼要用#ifndef

爲什麼要用#ifndef?

#ifdef的用法
#ifdef的用法
靈活使用#ifdef指示符,我們可以區隔一些與特定頭文件、程序庫和其他文件版本有關的代碼。
代碼舉例:新建define.cpp文件
#include "iostream.h"
int main()
{
#ifdef DEBUG
cout<< "Beginning execution of main()";
#endif
return 0;
}
運行結果爲:Press any key to continue
改寫代碼如下:
#include "iostream.h"
#define DEBUG
int main()
{
#ifdef DEBUG
cout<< "Beginning execution of main()";
#endif
return 0;
}
運行結果爲:Beginning execution of main()
Press any key to continue
更一般的情況是,#define語句是包含在一個特定的頭文件中。
比如,新建頭文件head.h,在文件中加入代碼:
#ifndef DEBUG
#define DEBUG
#endif
而在define.cpp源文件中,代碼修改如下:
#include "iostream.h"
#include "head.h"
int main(){
#ifdef DEBUG
cout<< "Beginning execution of main()";
#endif
return 0;
}
運行結果如下:Beginning execution of main()
Press any key to continue
結論:通過使用#ifdef指示符,我們可以區隔一些與特定頭文件、程序庫和其他文件版本有關的代碼。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef,尋找他後面的頭文件是否有,沒有的話執行#else,如果連#else也沒有寫就忽略#ifdef所寫的#endif,(到這裏結束)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
淺談#ifdef在軟件開發中的妙用
________________________________________
http://www.sina.com.cn 2001/12/03 12:23 賽迪網-中國計算機報
文/李斌兵
筆者從事UNIX環境下某應用軟件的開發與維護工作,用戶分佈於全國各地,各用戶需要的基本功能都是一樣的,但在某些功能上要隨着需求變化,不斷加以升級,要想實現全國各地用戶的升級工作是很困難的,而我們則只是利用E-mail發送補丁程序給用戶,這些補丁程序都是在一套軟件的基礎上不斷地修改與擴充而編寫的,並由不同的標誌文件轉入到不同的模塊,雖然程序體積在不斷擴大,但絲毫不影響老用戶的功能,這主要是得益於C程序的#ifdef/#else/#endif的作用。

我們主要使用以下幾種方法,假設我們已在程序首部定義#ifdef DEBUG與#ifdef TEST:
1.利用#ifdef/#endif將某程序功能模塊包括進去,以向某用戶提供該功能。
在程序首部定義#ifdef HNLD:
#ifdef HNLD
#include"n166_hn.c"
#endif
如果不許向別的用戶提供該功能,則在編譯之前將首部的HNLD加一下劃線即可。
2.在每一個子程序前加上標記,以便追蹤程序的運行。
#ifdef DEBUG
printf(" Now is in hunan !");
#endif
3.避開硬件的限制。有時一些具體應用環境的硬件不一樣,但限於條件,本地缺乏這種設備,於是繞過硬件,直接寫出預期結果。具體做法是:
#ifndef TEST
i=dial();
//程序調試運行時繞過此語句
#else
i=0;
#endif
調試通過後,再屏蔽TEST的定義並重新編譯,即可發給用戶使用了。
本貼來自ZDNetChina中文社區 http://bbs.zdnet.com.cn ,本貼地址:http://bbs.zdnet.com.cn/viewthread.php?tid=750556
更加簡明扼要的回答:
很簡單,一個叫head.h的頭文件,被你工程中兩個源文件同時包含如:A.cpp和B.cpp。不用這個條件編譯,編譯時會將head.h編譯兩次,導致編譯效率低下。  
    
  一旦使用了這個,如:  
  #ifndef   HEADER_H  
  #define   HEADER_H  
    
  //code  
    
  #endif     //   HEADER_H  
  編譯A.cpp的時候,編譯器在預處理時知道了有HEADER_H宏,那麼在編譯b.cpp的時候,預處理#ifndef   HEADER_H時發現條件爲假,自然不去編譯它了,節約了時間。

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