c語(yǔ)言的條件編譯詳解

c語(yǔ)言的條件編譯詳解

ID:8812831

大?。?7.13 KB

頁(yè)數(shù):6頁(yè)

時(shí)間:2018-04-08

c語(yǔ)言的條件編譯詳解_第1頁(yè)
c語(yǔ)言的條件編譯詳解_第2頁(yè)
c語(yǔ)言的條件編譯詳解_第3頁(yè)
c語(yǔ)言的條件編譯詳解_第4頁(yè)
c語(yǔ)言的條件編譯詳解_第5頁(yè)
資源描述:

《c語(yǔ)言的條件編譯詳解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、C語(yǔ)言的條件編譯詳解預(yù)處理過(guò)程掃描源代碼,對(duì)其進(jìn)行初步的轉(zhuǎn)換,產(chǎn)生新的源代碼提供給編譯器??梢?jiàn)預(yù)處理過(guò)程先于編譯器對(duì)源代碼進(jìn)行處理。在C語(yǔ)言中,并沒(méi)有任何內(nèi)在的機(jī)制來(lái)完成如下一些功能:在編譯時(shí)包含其他源文件、定義宏、根據(jù)條件決定編譯時(shí)是否包含某些代碼。要完成這些工作,就需要使用預(yù)處理程序。盡管在目前絕大多數(shù)編譯器都包含了預(yù)處理程序,但通常認(rèn)為它們是獨(dú)立于編譯器的。預(yù)處理過(guò)程讀入源代碼,檢查包含預(yù)處理指令的語(yǔ)句和宏定義,并對(duì)源代碼進(jìn)行響應(yīng)的轉(zhuǎn)換。預(yù)處理過(guò)程還會(huì)刪除程序中的注釋和多余的空白字符。預(yù)處理指

2、令是以#號(hào)開(kāi)頭的代碼行。#號(hào)必須是該行除了任何空白字符外的第一個(gè)字符。#后是指令關(guān)鍵字,在關(guān)鍵字和#號(hào)之間允許存在任意個(gè)數(shù)的空白字符。整行語(yǔ)句構(gòu)成了一條預(yù)處理指令,該指令將在編譯器進(jìn)行編譯之前對(duì)源代碼做某些轉(zhuǎn)換。下面是部分預(yù)處理指令:????????指令?????????????用途?????????#???????????空指令,無(wú)任何效果?????????#include????包含一個(gè)源代碼文件?????????#define?????定義宏?????????#undef??????取消已定義

3、的宏?????????#if?????????如果給定條件為真,則編譯下面代碼?????????#ifdef??????如果宏已經(jīng)定義,則編譯下面代碼?????????#ifndef?????如果宏沒(méi)有定義,則編譯下面代碼?????????#elif???????如果前面的#if給定條件不為真,當(dāng)前條件為真,則編譯下面代碼?????????#endif??????結(jié)束一個(gè)#if……#else條件編譯塊?????????#error??????停止編譯并顯示錯(cuò)誤信息一、文件包含????#include

4、預(yù)處理指令的作用是在指令處展開(kāi)被包含的文件。包含可以是多重的,也就是說(shuō)一個(gè)被包含的文件中還可以包含其他文件。標(biāo)準(zhǔn)C編譯器至少支持八重嵌套包含。????預(yù)處理過(guò)程不檢查在轉(zhuǎn)換單元中是否已經(jīng)包含了某個(gè)文件并阻止對(duì)它的多次包含。這樣就可以在多次包含同一個(gè)頭文件時(shí),通過(guò)給定編譯時(shí)的條件來(lái)達(dá)到不同的效果。例如:????????#define?AAA????????#include?"t.c"????????#undef?AAA????????#include?"t.c"????為了避免那些只能包含一次的頭文件

5、被多次包含,可以在頭文件中用編譯時(shí)條件來(lái)進(jìn)行控制。例如:????????/*my.h*/????????#ifndef?MY_H????????#define?MY_H??????????……????????#endif????在程序中包含頭文件有兩種格式:????????#include?????????#include?"my.h"????第一種方法是用尖括號(hào)把頭文件括起來(lái)。這種格式告訴預(yù)處理程序在編譯器自帶的或外部庫(kù)的頭文件中搜索被包含的頭文件。第二種方法是用雙引號(hào)把頭文件括起來(lái)。

6、這種格式告訴預(yù)處理程序在當(dāng)前被編譯的應(yīng)用程序的源代碼文件中搜索被包含的頭文件,如果找不到,再搜索編譯器自帶的頭文件。????采用兩種不同包含格式的理由在于,編譯器是安裝在公共子目錄下的,而被編譯的應(yīng)用程序是在它們自己的私有子目錄下的。一個(gè)應(yīng)用程序既包含編譯器提供的公共頭文件,也包含自定義的私有頭文件。采用兩種不同的包含格式使得編譯器能夠在很多頭文件中區(qū)別出一組公共的頭文件。二、宏????宏定義了一個(gè)代表特定內(nèi)容的標(biāo)識(shí)符。預(yù)處理過(guò)程會(huì)把源代碼中出現(xiàn)的宏標(biāo)識(shí)符替換成宏定義時(shí)的值。宏最常見(jiàn)的用法是定義代表

7、某個(gè)值的全局符號(hào)。宏的第二種用法是定義帶參數(shù)的宏,這樣的宏可以象函數(shù)一樣被調(diào)用,但它是在調(diào)用語(yǔ)句處展開(kāi)宏,并用調(diào)用時(shí)的實(shí)際參數(shù)來(lái)代替定義中的形式參數(shù)。????1.#define指令????????#define預(yù)處理指令是用來(lái)定義宏的。該指令最簡(jiǎn)單的格式是:首先神明一個(gè)標(biāo)識(shí)符,然后給出這個(gè)標(biāo)識(shí)符代表的代碼。在后面的源代碼中,就用這些代碼來(lái)替代該標(biāo)識(shí)符。這種宏把程序中要用到的一些全局值提取出來(lái),賦給一些記憶標(biāo)識(shí)符。????????????#define?MAX_NUM?10????????????in

8、t?array[MAX_NUM];????????????for(i=0;i

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。