歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

第10章 預(yù)處理命令(C語言編程)

  • 資源ID:248193600       資源大?。?span id="gxixbih" class="font-tahoma">704.50KB        全文頁數(shù):21頁
  • 資源格式: PPT        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

第10章 預(yù)處理命令(C語言編程)

單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,第,10,章 預(yù)處理命令,制作人:王敬華,第,10,章:預(yù)處理命令,學習的意義,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,C,語言的一個重要特征是它的,預(yù)處理功能,。我們知道,一個高級語言源程序在計算機上運行,必須先用編譯程序?qū)⑵浞g為機器語言。編譯包括詞法分析、語法分析、代碼生成、代碼優(yōu)化等步驟,有時在編譯之前還要做某些預(yù)處理工作,如去掉注釋,變換格式等。,C,語言允許在源程序中包含預(yù)處理命令,在正式編譯之前(詞法分析之前)系統(tǒng)先對這些命令進行“預(yù)處理”,然后整個源程序再進行通常的編譯處理。從語法上講,這些預(yù)處理命令不是,C,語言的一部分,但使用它們卻擴展了,C,語言程序設(shè)計的環(huán)境,可以簡化程序開發(fā)過程,提高程序的可讀性,也更有利于移植和調(diào)試,C,語言程序。本章主要介紹,宏定義,、,文件包括,和,條件編譯,等預(yù)處理命令。,學習的意義,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,源程序生成執(zhí)行文件的過程:,C,語言源程序,.c,或,.,cpp,編譯,目標程序,.,obj,鏈接,執(zhí)行程序,.exe,#include,#define PI 3.14159,void main(),float r=4;,printf,(“s=%,fn,”,PI*r*r);,預(yù)處理命令,預(yù)處理,本章討論之重點!,學習目標,學習內(nèi)容,預(yù)處理命令簡介,宏定義,不帶參數(shù)的宏定義,帶參數(shù)的宏定義,文件包括,條件編譯,本章小結(jié),掌握,#include,、,#define,、,#if,、,#,ifdef,、,#else,、,#,ifndef,和,#,endif,等命令的用法;,掌握宏定義和宏替換的一般方法;,掌握包含文件的處理方法;,了解條件編譯的作用和實現(xiàn)方法。,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,10.1,預(yù)處理命令簡介,預(yù)處理命令:,C,源程序中以,#,開頭、以換行符結(jié)尾的行,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,種類:,宏定義,#define,、,#,undef,文件包含,#include,條件編譯,#if,、,#,ifdef,、,#else,、,#,elif,、,#,endif,等,其他,#line,、,#error,、,#program,等,本章主要討論的內(nèi)容!,格式:,“,#”,開頭,占單獨書寫行,語句尾不加分號,10.2,宏定義,宏定義分為兩種:,不帶參數(shù)的宏定義,和,帶參數(shù)的宏定義,。,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,1,、不帶參數(shù)的宏定義,一般形式,#define,標識符 單詞串,指令名稱,宏名,被定義代表后面的單詞串,宏體,是宏的內(nèi)容文本,可缺省,表示宏名,定義過或取消宏體,功能,用指定標識符,(,宏名,),代替字符序列,(,宏體,),如,#define YES 1,#define NO 0,#define PI 3.1415926,#define OUT,printf(“Hello,World,”);,#define,SIZE,10,#define,INT_STR,%d,void main(),int,a,SIZE,i;,for(i=0;i=0;i-),printf,(,INT_STR,ai,);,宏定義,void main(),int,a,10,i;,for(i=0;i=0;i-),printf,(,%d,ai,);,預(yù)編譯處理后,注意:,宏替換時僅僅是將源程序中與宏名相同的標識符替換成宏的內(nèi)容文本,并不對宏的內(nèi)容文本做任何處理。,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,宏定義注意事項,C,程序員通常用,大寫字母,來定義宏名,以便與變量名區(qū)別。,如:,#define,PI,3.14159,宏定義的,位置任意,,但,一般放在函數(shù)外面,。,宏定義時,如果單詞串太長,需要寫多行,可以在行尾使用反斜線“,”,續(xù)行符,例如:,#define LONG_STRING this is a very long string that is,used as an example,宏名的,作用域,是從,#define,定義之后直到該宏定義所在文件結(jié)束,#,undef,可,終止宏名作用域,#,undef,標識符,#define YES 1,void main(),.,#,undef,YES,#define YES 0,void max(),.,YES,原作用域,YES,新,作用域,宏定義可以,嵌套定義,,但不能遞歸定義,#define R 2.0,#define PI 3.14159,#define L 2*PI*R (,),#define S PI*R*R (,),#define M M+10 (,),程序中字符串常量即雙引號中的字符,不作為宏進行宏替換操作,#define XYZ this is a test,printf(XYZ,);,輸出:,XYZ,,而不是:,this is a test,。,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,宏定義注意事項,宏定義一般以,換行結(jié)束,,不要用分號結(jié)束,以免引起不必要的錯誤,#define PI,3.14;,a=PI*2*2;,預(yù)編譯處理后,a=,3.14;,*2*2;,錯誤!,宏可以被,重復(fù)定義,。,#define N 10,/,第一次宏定義,int,f(),N,的內(nèi)容是,10,return(N*N);,#define N 20,/,第二次宏定義,void main(),N,的內(nèi)容是,20,printf,(%,dn,N+f();,在定義宏時,如果宏是一個表達式,那么一定要將這個表達式用()括起來,否則可能會引起非預(yù)期的結(jié)果。,#define NUM1 10,#define NUM2 20,#define NUM NUM1+NUM2,void main(),int,a=2,b=3;,a*=,NUM,;,b=b*,NUM,;,printf,(a=%d,b=%,dn,a,b);,void main(),int,a=2,b=3;,a*=,10+20,;,b=b*,10+20,;,printf,(a=%d,b=%,dn,a,b);,預(yù)編譯處理后,輸出結(jié)果:,a=60,b=50,(,),(,),(,),輸出結(jié)果:,a=60,b=90,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,2,、帶參數(shù)的宏定義,一般形式,#define,標識符,(,參數(shù)列表,),單詞串,參數(shù)表由一個或多個參數(shù)構(gòu)成,參數(shù)只有參數(shù)名,沒有數(shù)據(jù)類型符,參數(shù)之間用逗,號隔開,參數(shù)名必須是合法的標識符,通常會引用宏的參數(shù),例:,#define,S(a,b)a*b,.,area=S(3,2);,宏展開:,area=3*2;,宏展開:,形參用實參換,其它字符保留,宏體及各形參外一般應(yīng)加括號,(),不能加空格,例,#define S,(r)PI*r*r,相當于定義了不帶參宏,S,,,代表字符串,“(,r)PI*r*r”,例,#define POWER(x)x*x,x=4;y=6;,z=POWER(x+y);,宏展開:,z=,x+y,*,x+y,;,一般寫成:#,define POWER(x),(,(,x,),*,(,x,),),宏展開:,z=(x+y)*(x+y);,#define,MAX(x,y)(x)(y)?(x):(y),.,void main(),int,a,b,c,d,t;,.,t=,MAX(a+b,c+d,);,宏展開:,t=(a+b)(c+d)?(a+b):(c+d);,int,max(int,x,int,y),return(x,y?x:y);,void main(),int,a,b,c,d,t;,.,t=,max(a+b,c+d,);,【,例,】,用宏定義和函數(shù)實現(xiàn)同樣的功能,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,帶參的宏與函數(shù)區(qū)別,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,帶參宏,函數(shù),處理時間,編譯時,程序運行時,參數(shù)類型,無類型問題,定義實參、形參類型,處理過程,不分配內(nèi)存,簡單的字符置換,分配內(nèi)存,先求實參值,再代入形參,程序長度,變長,不變,運行速度,不占運行時間,調(diào)用和返回占時間,10.3,文件包含,處理過程,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,功能,一個源文件可將另一個源文件的內(nèi)容全部包含進來,一般形式,#define ,或,#define “,包含文件名”,預(yù)編譯時,用被包含文件的內(nèi)容取代該預(yù)處理命令,再對“包含”后的文件作一個源文件編譯,:,直,接到系統(tǒng)指定的“文件包含目錄”去查找被包含的文件,“”,:,系統(tǒng)首先到當前目錄下查找被包含文件,如果沒找到,再到系統(tǒng),指定的“文件包含目錄”去查找。,預(yù)編譯處理后,A,源文件,prg1.cpp,#include prg1.cpp,B,源文件,prg2.cpp,B,A,新源文件,prg2.cpp,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,文件包含舉例,:,#include ,head.h,#include ,func.cpp,void main(),int,a,b,c;,a=,getnum,();,b=,getnum,();,c=max(,max(a,b),NUM);,printf,(MAX=%,dn,c);,(,stdio.h,文件中的內(nèi)容),#define NUM 10,int,max(,int,x,int,y),return(x y?x:y);,int,getnum,(),int,a;,scanf(%d,&a),return(a);,void main(),int,a,b,c;,a=,getnum,();,b=,getnum,();,c=max(,max(a,b),NUM);,printf,(MAX=%,dn,c);,#include ,#define NUM 10,int,max(,int,x,int,y),return(x y?x:y);,int,getnum,(),int,a;,scanf(%d,&a),return(a);,預(yù)編譯處理后,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,文件包含的優(yōu)點,:,一個大程序,通常分為多個模塊,并由多個程序員分別編程。有了文件包含處理功能,就可以將多個模塊共用的數(shù)據(jù)(如符號常量和數(shù)據(jù)結(jié)構(gòu))或函數(shù),集中到一個單獨的文件中(如上例中的文件,head.h,和,func.cpp,)。這樣,凡是要使用其中數(shù)據(jù)或調(diào)用其中函數(shù)的程序員,只要使用文件包含處理功能,將所需文件包含進來即可,不必再重復(fù)定義它們,從而減少重復(fù)勞動。,文件包含的幾點說明,常用在文件頭部的被包含文件,稱為“標題文件”或“頭部文件”,,常以,.h,(,head,)作為后綴,簡稱頭文件,。在頭文件中,除可包含宏定義外,還可包含外部變量定義、結(jié)構(gòu)類型定義等。,一條包含命令,只能指定一個被包含文件,。如果要包含,n,個文件,則要用,n,條包含命令。,文件包含可以嵌套,,即被包含文件中又包含另一個文件。,10.4,條件編譯,語言程序設(shè)計教程,第十章,預(yù)處理命令,C,根據(jù)一定的條件去編譯源文件的不同部分,這就是,條件編譯,。,1,、,#if,#,endif,形式,格式:,#if,條件,1,程序段,1,#,elif,條件,2,程序段,2,#else,程序段,n,#,endif,常量表達式。通常會用到宏名,條件可以不加括號“()”,#,elif,和,#else,可以沒有,#,endif,必須存在,它是,#if,命令的結(jié)尾,如果條件,1,為真就編譯程序段,1,,否則如果條件,2,為真就編譯程序段,2,,,,如果各條件都不為真就編譯程序段,n,。,作用:,#if,和,#,elif,常常與,defined,命令配合使用,,defined,命令的格式為,:,defined,(宏名)或,defined,宏名,功能:,判斷某個宏是否已經(jīng)定義,如果已經(jīng)定義,,defined,命令返回,1,,否則返回,0,。,Defined,命令只能與,#if,或,#,elif,配合使用,不能單獨使用。,例

注意事項

本文(第10章 預(yù)處理命令(C語言編程))為本站會員(fgh****35)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!