#include 文件包含指令
指示編譯器將一個(gè)源文件嵌入到當(dāng)前源文件中該指令處。
#include <> //聲明公共的系統(tǒng)標(biāo)準(zhǔn)函數(shù)
#include “” //聲明用自定義的常量、變量和函數(shù)
頭文件本質(zhì):
函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之前,或者調(diào)用在其他文件中(如系統(tǒng)庫(kù))定義的函數(shù),必須先進(jìn)行函數(shù)聲明。系統(tǒng)函數(shù)按其功能被分成幾大類,對(duì)應(yīng)每類函數(shù)有一個(gè)頭文件,其中給出了這一類函數(shù)的原形聲明。所以,只需在程序中使用#include指令包含相應(yīng)的頭文件,而不必在程序中直接進(jìn)行函數(shù)的聲明。
以多文件方式組織的程序常常需要在各文件之間共享一些常量聲明、變量聲明、結(jié)構(gòu)聲明、函數(shù)聲明和宏定義,可以將這些語(yǔ)句放在一個(gè)C++頭文件中(以h作擴(kuò)展名),然后利用#include指令將頭文件包含到需要這些內(nèi)容的源文件中。
個(gè)人理解:因?yàn)?/span>C++語(yǔ)言特點(diǎn)(見(jiàn)上)的緣故,所以需要頭文件組織文件結(jié)構(gòu),而C#是完全面向?qū)ο蟮?,基本類型都是?duì)象,常量、結(jié)構(gòu)、函數(shù)都是封裝在類中的,就不需要頭文件,類本身就是非常好的組織結(jié)構(gòu),只需添加相應(yīng)類的引用即可。
頭文件的其他作用:
一、通過(guò)頭文件來(lái)調(diào)用庫(kù)功能。在很多場(chǎng)合,源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶提供頭文件和二進(jìn)制的庫(kù)即可。用戶只需要按照頭文件中的接口聲明來(lái)調(diào)用庫(kù)功能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫(kù)中提取相應(yīng)的代碼。
二、頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的聲明不一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。
#define 宏定義指令
宏是一個(gè)表示特定內(nèi)容的標(biāo)識(shí)符,被代表的內(nèi)容稱為宏體,編譯程序以定義的宏體代替我、源文件中的宏,稱為宏替換。
宏、內(nèi)聯(lián)、const
帶參數(shù)的宏與內(nèi)聯(lián)函數(shù)類似,但兩者有本質(zhì)區(qū)別。宏替換是在正式編譯之前,不進(jìn)行參數(shù)傳遞。函數(shù)調(diào)用發(fā)生在程序?qū)嶋H執(zhí)行時(shí),要進(jìn)行實(shí)參與形參的傳遞。使用宏的好處是它不需要調(diào)用及返回時(shí)的開(kāi)銷。
宏也有不安全因素,對(duì)于不帶參數(shù)的宏,使用const類型取代宏更安全。const會(huì)有類型檢查,而define只是簡(jiǎn)單的替換。
條件編譯指令
條件編譯預(yù)處理是指按照指定的條件決定哪些源程序段將被編譯,而哪些源程序段將不被編譯,從而使編譯程序能夠?qū)τ脩舻脑闯绦蛴羞x擇性地滿足一定條件的目標(biāo)程序。
在進(jìn)行條件編譯時(shí),常常將某個(gè)宏是否被定義作為條件編譯的條件,定義這種宏時(shí)只需給出宏名,不需要指定宏體,如下所示: #define <宏名>
如果要取消前面定義的宏,可使用 #undef <宏名>
1. #if…[#else]…#endif
2. #ifdef…[#else]…#endif
3. #ifndef…[#else]…#endif
#if 檢測(cè)后面的表達(dá)式的值的真假;#ifdef和#ifndef檢測(cè)后面的宏是否被定義
程序員在調(diào)試程序時(shí),經(jīng)常需要使用輸出語(yǔ)句顯示一些調(diào)試信息(比如看一些過(guò)程的中間值,了解執(zhí)行流程等),這時(shí)可以采用下面例題介紹的方法:在源程序開(kāi)頭位置定義一個(gè)調(diào)試宏,在所有調(diào)試信息輸出語(yǔ)句前加上#ifdef條件編譯指令,在程序調(diào)試完之后,為了不再顯示這些信息,只需刪除源程序開(kāi)頭位置的宏定義指令,重新編譯鏈接程序即可,程序其他地方無(wú)需改動(dòng)。++深刻理解這段話++
#define DEBUG
main( )
{
int nDebug = 5;
int nRelease = 6;
#ifdef DEBUG
cout << ”DEBUG : value is” << nDebug << endl;
#else
cout << ”RELEASE : value is” << nRelease << endl;
#endif
return ;
}
聯(lián)系客服