第10章 預(yù)處理命令_第1頁
第10章 預(yù)處理命令_第2頁
第10章 預(yù)處理命令_第3頁
第10章 預(yù)處理命令_第4頁
第10章 預(yù)處理命令_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

C語言編程實戰(zhàn)寶典大家好!!!第10章

預(yù)處理命令預(yù)處理器的行為是由指令所控制的。這些指令是由#字符開頭的,可以說,預(yù)處理指令以符號#作為行的開關(guān)。預(yù)處理指令可以出現(xiàn)在源文件中的任何位置,指令的作用域從其定義的位置開始直到本文件結(jié)尾。10.1預(yù)處理器的工作方式#define指令定義了一個宏,宏是一個名字,它通常指代某一類型的常量。預(yù)處理器會將宏的名字和它的定義存儲在一起,當這個宏在其后的程序中用到的時候,預(yù)處理器就“擴展”該宏,即將宏名用宏定義中的值替換掉。#include指令告訴編譯器去打開一個特定的文件,并將這個文件的內(nèi)容作為正在編譯的文件的一部分包含進來。/*求b值*/#include<stdio.h>

#defineLEN20#defineSCALE(3.0/5.0)

main(){ floata,b; printf("Entervaluea:"); scanf("%f",&a);

b=(a+LEN)*SCALE; printf("Thevalueofbis:%f\n",b);}空行空行從文件stdio.h中引入的行空行空行空行空行main(){ floata,b; printf("Entervaluea:"); scanf("%f",&a);

b=(a+20)*(3.0/5.0); printf("Thevalueofbis:%f\n",b);}10.2預(yù)處理指令預(yù)處理的指令主要類型有3種,具體如下:1.宏定義。#define和#undef指令。2.文件包含。#include指令3.條件編譯。#if、#ifdef、#ifndef、#elif、#else和#endif指令。10.2預(yù)處理指令1.所有的預(yù)處理指令都以#開頭。2.預(yù)處理指令的各個符號之間可以插入任意數(shù)量的空格或橫向制表符。3.預(yù)處理指令總是在第一個換行符出現(xiàn)時結(jié)束,除非明確指明下一行仍然屬于該指令。4.預(yù)處理指令可以在程序的任何位置出現(xiàn)。5.預(yù)處理指令的注釋可以與該指令位于同一行。10.3宏定義宏可以帶參數(shù),也可以不帶參數(shù),C語言編譯器對帶參數(shù)的宏提供了支持。10.3.1不帶參數(shù)的宏不帶參數(shù)的宏定義格式為:#define標識符替換列表當預(yù)處理器在程序中發(fā)現(xiàn)了宏的實例后,總會用替換列表來代替該宏(即替換宏名)。從宏變成最終的替換文本的過程稱為宏展開。對不帶參數(shù)的宏的幾點說明:(1)宏名通常使用大寫字母來表示,以便與變量名相區(qū)分。(2)當程序中需要多次重復(fù)書寫某個字符串時可以考慮使用宏。(3)預(yù)處理器進行宏展開時只做替換,而不會進行正確性檢查,如果宏定義中的替換文本寫錯了,那么宏展開時也會照樣進行替換。(4)宏定義不是C語言的語句,在行末結(jié)尾處不需要加分號,否則會連同分號一起進行替換。(5)宏名的有效作用范圍為從該#define命令之后到本源文件結(jié)束。(6)如果想在程序中的某個位置終止宏定義的作用域則可以使用#undef命令。10.3.2帶參數(shù)的宏帶參數(shù)的宏不是只進行簡單的字符串替換,還需要進行參數(shù)替換。帶參數(shù)的宏定義格式為:#define標識符(x1,x2,...,xn)替換列表10.3.2帶參數(shù)的宏當預(yù)處理器碰到一個帶參數(shù)的宏時,它首先會將其定義存儲起來。在后面的程序中,如果出現(xiàn)了“

宏名(y1,y2,...yn)”格式的宏調(diào)用(其中y1,y2,...yn則是一系列參數(shù)值),則預(yù)處理器就會使用已存儲起來的宏的替換列表進行替換,并使用參數(shù)值y1來替換x1,參數(shù)值y2來替換x2,...,參數(shù)值yn來替換xn。10.3.2帶參數(shù)的宏假設(shè)定義了如下的宏:#defineAREA(x)x*x如果在后續(xù)的程序中出現(xiàn)了如下的語句:z=AREA(5);那么預(yù)編譯器會將其替換為:z=5*5;10.3.3#運算符宏定義中還可以包含兩個特殊的運算符:#和##。它們對應(yīng)的運算會在預(yù)處理時被執(zhí)行。#符號作為一個預(yù)處理運算符,可以將宏的參數(shù)轉(zhuǎn)換為字符串的字面量。它只能出現(xiàn)在帶參數(shù)宏的替換列表中。10.3.3#運算符#include<stdio.h>#defineAREA(x)printf("Theareaof"#x"is%d\n",((x)*(x)));main(){

inty=3;

AREA(y);

AREA(2+5);}該程序輸出如下:Theareaofyis9Theareaof2+5is4910.3.4##運算符##運算符也可以用于宏定義中的替換部分,它可以將兩個符號組合成為一個符號。例如,可以定義下面的宏:#defineNAME(n)a##n如果宏調(diào)用為NAME(3),那么這個宏可以展開為:a310.3.5取消宏定義可以使用#undef命令來終止宏定義的作用域。假設(shè)有如下定義:#defineNUM50則指令:#undefNUM會取消該定義。此后就可以重新定義NUM宏,給它一個新值。10.3.6宏和函數(shù)很多實際問題既可以使用帶參數(shù)的宏來解決,也可以使用函數(shù)來完成。那么到底應(yīng)該選擇哪一種呢?這沒有硬性的規(guī)定,但是有些規(guī)則可以作為參考。在使用宏時,如果不謹慎的話就可能會出現(xiàn)一些無法預(yù)料的結(jié)果,因此宏在某些情況下比一般的函數(shù)要更復(fù)雜。對于某個具體問題是選擇宏還是函數(shù)實際上是對時間和空間的權(quán)衡。頻繁的函數(shù)調(diào)用比使用宏要更費時。宏所具有的一個優(yōu)點就是它不會對參數(shù)的類型進行檢查,因此一個宏可以用于多種類型。如int類型和float類型的參數(shù)都可以使用宏AREA(x)。10.3.7宏定義(#define)和

類型定義(typedef)宏定義用來替代變量或函數(shù),是由源程序中宏定義命令完成的。類型定義使用typedef關(guān)鍵字,它可以定義一種類型的新別名,它不同于宏,不是簡單的字符串替換。10.4條件編譯在編寫程序時,有時候希望只對其中的一部分內(nèi)容在滿足某個條件的情況下才進行編譯,這就是條件編譯。10.4.1#if…#endif指令#if...#endif指令的格式為:#if表達式

程序段#endif它的作用是當指定的表達式值為真(非零)時就對程序段進行編譯,否則不編譯該程序段。10.4.1#if…#endif指令首先定義一個宏CONDITION,并給它一個非0的值:#defineCONDITION1接下來,使用#if...#endif指令:#ifCONDITION printf("correct");#endif10.4.2#if…#else…#endif指令#if...#else...#endif指令的格式為:#if表達式

程序段1#else

程序段2#endif它的作用是當指定的表達式值為真(非零)時就對程序段1進行編譯,否則編譯程序段2。10.4.3#if…#elif…#endif指令#if...#elif..#endif指令的格式為:#if表達式1

程序段1#elif表達式2

程序段2 ...#elif表達式n

程序段n#endif10.4.3#if…#elif…#endif指令#ifCONDITION==1 printf("up");#elifCONDITION==2 printf("down");#elifCONDITON==3 printf("loop");#endif10.4.4#ifdef…#endif指令#ifdef指令用于測試一個標識符是否已經(jīng)定義為宏,它的使用方法與#if指令類似。其格式為:#ifdef標識符

程序段#endif10.4.4#ifdef…#endif指令還可以在#ifdef和#endif之間添加#else語句,格式為:#ifdef標識符

程序段1#else

程序段2#endif10.4.5#ifndef…#endif指令#ifndef指令與#ifdef指令的作用相反,它測試的是標識符是否沒有被定義為宏。其格式為:#ifndef標識符

程序段#endif10.4.5#ifndef…#endif指令還可以在#ifndef和#endif之間添加#else語句,格式為:#ifndef標識符

程序段1#else

程序段2#endif此時表示若標識符未被定義為宏,則編譯程序段1,否則編譯程序段2。10.5文件包含所謂文件包含指的是一個源文件可以將另外一個源文件的全部文件都包含進來,即將另外一個文件包含到本文件中。C

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論