全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第10講預(yù)編譯處理課件_第1頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第10講預(yù)編譯處理課件_第2頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第10講預(yù)編譯處理課件_第3頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第10講預(yù)編譯處理課件_第4頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第10講預(yù)編譯處理課件_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第十講編譯預(yù)處理命令7/30/20231作者:張旭仟版權(quán)所有歡迎盜版全國(guó)計(jì)算機(jī)等級(jí)考試2C課程第十講編譯預(yù)處理命令7/26/編譯預(yù)處理命令的基本概念A(yù)NSIC規(guī)定,可以在C源程序中加入一些“編譯預(yù)處理命令”,以改進(jìn)程序設(shè)計(jì)環(huán)境,提高編程效率。例如:#definePI3.14159#include<stdio.h>雖然這些“編譯預(yù)處理命令”也是由ANSIC統(tǒng)一規(guī)定的,但它們并非C語(yǔ)言的組成部分。含有這種“編譯預(yù)處理命令”的源程序,只有在正式編譯之前先對(duì)它們進(jìn)行“預(yù)處理”后,才能被正常編譯成“目標(biāo)程序”。C語(yǔ)言提供的預(yù)處理命令主要有:宏定義命令、文件包含命令、條件編譯命令。為了與一般C語(yǔ)句相區(qū)別,這些編譯預(yù)處理命令”都以“?!碧?hào)開頭。7/30/20232作者:張旭仟版權(quán)所有歡迎盜版編譯預(yù)處理命令的基本概念A(yù)NSIC規(guī)定,可以在C源程序中加不帶參數(shù)的宏替換命令不帶參數(shù)的宏替換命令一般形式:#define標(biāo)識(shí)符字符串例如:#definePI3.1415926其中“#define”是宏定義命令,PI稱為“宏名”,“3.1415926”稱為宏體。作用是將程序中在該命令以后出現(xiàn)的所有的PI都用“3.1415926”代替。在預(yù)編譯時(shí)將宏名替換成字符串的過程稱為“宏展開”。7/30/20233作者:張旭仟版權(quán)所有歡迎盜版不帶參數(shù)的宏替換命令不帶參數(shù)的宏替換命令7/26/20233不帶參數(shù)的宏替換命令說(shuō)明:(1)#define命令、宏名、宏體之間必須用空格隔開;(2)由于宏定義不是C語(yǔ)言程序語(yǔ)句,行的末尾不需要加“;”號(hào);如果加了分號(hào)則會(huì)作為宏體的一部分被一起置換。(3)宏名習(xí)慣上一般用大寫字母表示,以便與普通變量名區(qū)別。但這并非語(yǔ)法規(guī)定,即用小寫字母并不屬于語(yǔ)法錯(cuò)誤;(4)程序中被加上雙引號(hào)“”的宏名,將不能被替換,如:printf(“PI”);語(yǔ)句中的PI不會(huì)被替換為3.1415926;(5)適當(dāng)使用宏名代替一個(gè)字符串,可以減少程序中重復(fù)書寫某些復(fù)雜數(shù)據(jù)的工作量。7/30/20234作者:張旭仟版權(quán)所有歡迎盜版不帶參數(shù)的宏替換命令說(shuō)明:7/26/20234作者:張旭仟不帶參數(shù)的宏替換命令例如:#include<stdio.h>#definePI3.1415926voidmain(){floatl,s,r,v;printf("inputradius:");scanf("%f",&r);l=2.0*PI*r;s=PI*r*r;v=4.0/3*PI*r*r*r;printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v);}運(yùn)行情況如下:1=25.1328s=50.2655v=150.79667/30/20235作者:張旭仟版權(quán)所有歡迎盜版不帶參數(shù)的宏替換命令例如:#include<stdio.不帶參數(shù)的宏替換命令(6)宏定義是用宏名代替一個(gè)字符串,只作簡(jiǎn)單置換,并不對(duì)字符串(宏體)作正確性檢查。(7)#define命令通常寫在文件開頭或函數(shù)之前。默認(rèn)情況下,宏名的有效范圍,是從宏定義命令之后開始,直到本源文件結(jié)束。(8)當(dāng)然,也可以用#undef命令,提前終止宏定義的作用范圍。如:#defineG9.8__voidmain(){G的有效范圍…}__#undefGf1(){…}7/30/20236作者:張旭仟版權(quán)所有歡迎盜版不帶參數(shù)的宏替換命令(6)宏定義是用宏名代替一個(gè)字符串,只不帶參數(shù)的宏替換命令(9)在進(jìn)行宏定義時(shí),可以引用已定義的宏名,宏展開時(shí)將會(huì)層層置換。例如:

#include<stdio.h>#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rvoidmain(){printf("L=%f\nS=%f\n",L,S);}編譯預(yù)處理時(shí):printf(“L=%f\nS=%f\n”,L,S);語(yǔ)句將被展開為printf(“L=%f\nS=%f\n”,2*3.1415926*3.0,3.1415926*3.0*3.0);7/30/20237作者:張旭仟版權(quán)所有歡迎盜版不帶參數(shù)的宏替換命令(9)在進(jìn)行宏定義時(shí),可以引用已定義的帶參數(shù)的宏定義帶參數(shù)的宏定義作用:不只進(jìn)行簡(jiǎn)單的字符串替換,還進(jìn)行參數(shù)的替換。一般形式為:#define宏名(參數(shù)表)字符串

例如:#defineS(a,b)a*b

area=S(3,2);說(shuō)明:程序中用3和2分別代替宏定義中的形式參數(shù)a和b,用3*2代替S(3,2)。因此賦值語(yǔ)句展開為:area=3*27/30/20238作者:張旭仟版權(quán)所有歡迎盜版帶參數(shù)的宏定義帶參數(shù)的宏定義例如:說(shuō)明:7/26/20238帶參數(shù)的宏定義對(duì)帶參的宏定義是這樣展開置換的:對(duì)帶實(shí)參的宏,如S(3,2),基本原則也是按define命令行中指定的字符串從左到右進(jìn)行置換的。但如果字符串中包含有宏名中定義的形參,如:“a*b”中的a和b,則要用程序中相應(yīng)的實(shí)參(可以是常量、變量或表達(dá)式)來(lái)代替;其他字符,如“a*b”中的*號(hào),則原樣保留。圖中S(3,2)將被置換為3*2,其中3和2是實(shí)參,將代替指定字符串a(chǎn)*b中的a和b,*不是參數(shù),則被原樣保留。7/30/20239作者:張旭仟版權(quán)所有歡迎盜版帶參數(shù)的宏定義對(duì)帶參的宏定義是這樣展開置換的:圖中S(3,2帶參數(shù)的宏定義例如:#include<stdio.h>#definePI3.1415926#defineS(r)PI*r*rvoidmain(){floata,area;a=3.6;area=S(a);printf("r=%f\narea=%f\n",a,area);}說(shuō)明:賦值語(yǔ)句“area=S(a);”展開后被替換為:area=3.1415926*a*a;運(yùn)行結(jié)果:r=3.600000area=40.7150387/30/202310作者:張旭仟版權(quán)所有歡迎盜版帶參數(shù)的宏定義例如:#include<stdio.h>說(shuō)文件包含命令所謂“文件包含”,是指一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包括進(jìn)來(lái)。C語(yǔ)言提供了#include命令用來(lái)實(shí)現(xiàn)“文件包含”的操作。其一般形式為:#include"文件名"或#include<文件名>說(shuō)明:(1)在#include命令中,文件名可以用雙撇號(hào)或尖括號(hào)括起來(lái)。(2)一個(gè)#include命令只能指定一個(gè)被包含文件,如果要包含n個(gè)文件,要用n個(gè)#include命令。7/30/202311作者:張旭仟版權(quán)所有歡迎盜版文件包含命令所謂“文件包含”,是指一個(gè)源文件可以將另外一個(gè)源文件包含命令說(shuō)明:(3)在一個(gè)被包含文件中又可以包含另一個(gè)被包含文件,即文件包含是可以嵌套的。如下圖所示#include<file2.c>A#include<file3.c>BCfile1.cfile2.cfile3.cCBC7/30/202312作者:張旭仟版權(quán)所有歡迎盜版文件包含命令說(shuō)明:#include<file2.c>A#i小練習(xí):1、以下敘述中錯(cuò)誤的是(2008年4月)A)在程序中凡是以“?!遍_始的語(yǔ)句行都是預(yù)處理命令行B)預(yù)處理命令行的最后不能以分號(hào)表示結(jié)束C)#defineMAX是合法的宏定義命令行D)C程序?qū)︻A(yù)處理命令行的處理是在程序執(zhí)行的過程中進(jìn)行的7/30/202313作者:張旭仟版權(quán)所有歡迎盜版小練習(xí):1、以下敘述中錯(cuò)誤的是(2008年4月)7/26小練習(xí):2、有以下程序(2010年3月)#include<stdio.h>#defineSUB(a)(a)-(a)main(){ inta=2,b=3,c=5,d; d=SUB(a+b)*c; printf("%d\n",d);}程序運(yùn)行后的輸出結(jié)果是A)0 B)-12 C)-20 D)107/30/202314作者:張旭仟版權(quán)所有歡迎盜版小練習(xí):2、有以下程序(2010年3月)7/26/2023小練習(xí):3、有以下程序(2009年9月)#include<stdio.h>#definef(x)x*x*xmain(){ inta=3,s,t;3+1*3+1*3+1 s=f(a+1); t=f((a+1)); printf("%d,%d",s,t);}程序運(yùn)行后的輸出結(jié)果是 A)10,64B)10,10 C)64,10 D)64,647/30/202315作者:張旭仟版權(quán)所有歡迎盜版小練習(xí):3、有以下程序(2009年9月)7/26/2023小練習(xí):4、有以下程序#include<stdio.h>#definePT3.5;#defineS(x)PT*x*x;mian(){ inta=1,b=2; printf(“%4.1f\n”,S(a+b)); 3.5*1+2*1+2}程序運(yùn)行后輸出的結(jié)果是A)14.0 B)31.5 C)7.5 D)程序有錯(cuò)無(wú)輸出結(jié)果7/30/202316作者:張旭仟版權(quán)所有歡迎盜版小練習(xí):4、有以下程序7/26/202316作者:張旭仟小練習(xí):5、有一個(gè)名為init.txt的文件,內(nèi)容如下:#defineHDY(A,B)A/B#definePRINT(Y)printf(“y=%d\n”,Y)有以下程序#include"stdio.h"#include"init.txt"main(){ inta=1,b=2,c=3,d=4,k; k=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論