




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ANSIC標準規定可以在C源程序中加入一些“預處理命令”,以改進程序設計環境,提高編程效率。這些預處理命令是由ANSIC統一規定的,但是它不是C語言本身的組成部分,不能直接對它們進行編譯(因為編譯程序不能識別它們)。必須在對程序進行通常的編譯之前,先對程序中這些特殊的命令進行“預處理”經過預處理后程序可由編譯程序對預處理后的源程序進行通常的編譯處理,得到可供執行的目標代碼。4.6編譯預處理ANSIC標準規定可以在C源程序中加入一些“預處理命令”,以改進程序設計環境,提高編程效率。這些預處理命令是由ANSIC統一規定的,但是它不是C語言本身的組成部分,不能直接對它們進行編譯(因為編譯程序不能識別它們)。必須在對程序進行通常的編譯之前,先對程序中這些特殊的命令進行“預處理”經過預處理后程序可由編譯程序對預處理后的源程序進行通常的編譯處理,得到可供執行的目標代碼。4.6編譯預處理C語言與其他高級語言的一個重要區別是可以使用預處理命令和具有預處理的功能。C提供的預處理功能主要有以下三種:
1.宏定義#define2.文件包含#include3.條件編譯#if--#else--#endif
這些功能分別用宏定義命令、文件包含命令、條件編譯命令來實現。為了與一般C語句相區別,這些命令以符號“#”開頭。
#defineYES1#defineNO0如if(x==YES)printf(“correct!\n”);elseif(x==NO)printf(“error!\n”);展開后:if(x==1)printf(“correct!\n”);elseif(x==0)printf(“error!\n”);4.6.1宏定義一、不帶參數宏定義一般形式:
#define宏名[宏體]功能:用指定標識符(宏名)代替字符序列(宏體)宏展開:預編譯時,用宏體替換宏名---不作語法檢查如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf(“Hello,World”);宏體可缺省,表示宏名定義過或取消宏體定義位置:任意(一般在函數外面)作用域:從定義命令到文件結束#undef可終止宏名作用域格式:
#undef宏名例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}YES原作用域YES新作用域宏定義可嵌套,不能遞歸例#defineMAXMAX+10(
)引號中的內容與宏名相同不置換例#definePI3.14159printf(“2*PI=%f\n”,PI*2);宏展開:printf(“2*PI=%f\n”,3.14159*2);宏定義中使用必要的括號()例#defineWIDTH80#defineLENGTH
WIDTH+40var=LENGTH*2;宏展開:var=80+40*2;()()例#defineWIDTH80#defineLENGTH
WIDTH+40var=LENGTH*2;宏展開:var=80+40*2;2帶參數宏定義一般形式:#define宏名(參數表)宏體例#defineS(r)PI*r*r相當于定義了不帶參宏S,代表字符串“(r)PI*r*r”宏展開:形參用實參換,其它字符保留宏體及各形參外一般應加括號()例#defineS(a,b)a*b………..area=S(3,2);宏展開:area=3*2;不能加空格例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展開:z=x+y*x+y;一般寫成:#definePOWER(x)((x)*(x))宏展開:z=((x+y)*(x+y));#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展開:t=(a+b)>(c+d)?(a+b):(c+d);intmax(intx,inty){return(x>y?x:y);}main(){inta,b,c,d,t;…….t=max(a+b,c+d);………}例用宏定義和函數實現同樣的功能帶參的宏與函數區別帶參宏函數處理過程不分配內存簡單的字符置換分配內存先求實參值,再代入形參處理時間編譯時程序運行時參數類型無類型問題定義實參,形參類型程序長度變長不變運行速度不占運行時間調用和返回占時間4.6.2文件包含1、功能:一個源文件可將另一個源文件的內容全部包含進來2、一般形式:#include“文件名”或#include<文件名>#include“file2.c”file1.cfile2.cfile1.cfile2.cABA3、處理過程:預編譯時,用被包含文件的內容取代該預處理命令,再對“包含”后的文件作一個源文件編譯。<>直接按標準目錄搜索“”先在當前目錄搜索,再搜索標準目錄可指定路徑被包含文件內容源文件(*.c)頭文件(*.h)宏定義數據結構定義函數說明等文件包含可嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.c
Bfile1.cAfile3.cfile2.c
4.6.3條件編譯概念:所謂“條件編譯”,是對部分內容指定編譯的條件,使其只在滿足一定條件才進行編譯。條件編譯命令的幾種形式:(1)#ifdef標識符程序段1#else
程序段2#endif(2)#ifndef標識符程序段1#else
程序段2#endif(3)#if表達式程序段1#else
程序段2#endif例9.7輸入一行字母字符,根據需要設置條件編譯,使之能將字母全改為大寫輸出,或全改為小寫字母輸出。運行結果為:CLANGUAGE#include<stdio.h>#defineLETTER1voidmain(){charstr[20]="CLanguage",c;inti;i=0;while((c=str[i])!='\0'){i++;#if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數字營銷師考試試卷及答案2025年
- 工程管理實務知識2025年考試試卷及答案
- 2025年哲學專業考試試卷及答案
- 2025年污染防控與環境治理職稱考試試卷及答案
- 2025年網絡文化與傳播專業入學考試試卷及答案
- 2025年生物工程原理與應用考核試卷及答案
- T/XFBZ 006-2019網上校服銷售管理規范
- 2025年地方政府與公共政策研究專業考試模擬題及答案
- 2025年旅游管理專業實踐能力考試試題及答案
- T/WQTB 1002-2021板式網球運動場地使用要求及檢驗方法
- GA/T 544-2021多道心理測試系統通用技術規范
- 腰椎間盤突出癥的針刀治療課件
- 《法理學》考試筆記與重點
- DB44!T+2419-2023全生曬柑普茶生產技術規程
- (52)-皰疹性咽峽炎小兒推拿探秘
- GMP體系文件(手冊+程序)
- 柴油叉車日常點檢表
- 物流成本管理-日日順d2d物流成本分析
- 集電線路安裝工程質量通病防治
- 大學生動漫創業計劃書
- 壓鑄機維護與保養新
評論
0/150
提交評論