為什麼要用#ifndef

來源:互聯網
上載者:User
為什麼要用#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時發現條件為假,自然不去編譯它了,節約了時間。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.