




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、、第9章、前處理指令、本章要點、前處理的概念c語言處理系統(tǒng)的前處理功能前處理指令的使用、主要內(nèi)容、9.1宏定義9.2“包含文件”處理9.3條件編譯、基本概念、ANSI C標(biāo)準(zhǔn)規(guī)定在源程序中加入“前處理指令”, 這些預(yù)處理命令可以改進(jìn)程序,這些命令由ANSI C統(tǒng)一,但不是c語言本身的一部分,編譯器無法直接編譯(因為編譯器無法識別)。 在通常編譯程序之前,對程序中的這些特殊指令進(jìn)行“預(yù)處理”而預(yù)處理的程序,編譯器對預(yù)處理的源程序進(jìn)行通常的編譯處理,必須得到可執(zhí)行的目標(biāo)代碼。 基本概念、c語言和其他高級語言的一個重要區(qū)別是可以使用預(yù)處理命令和預(yù)處理功能。 提供的預(yù)處理功能主要有以下3種。 宏定義文
2、件包含條件編譯這些功能分別由宏定義命令、文件包含命令、條件編譯命令實現(xiàn)。 為了與常規(guī)語句區(qū)別開來,這些命令以符號“”開頭。 例如,#define #include、9.1宏定義、9.1.1無殘奧儀表宏定義和宏定義的一般形式是:而define標(biāo)識符字符串例如是define PI 3.1415926,其中,宏定義的角色在該程序文件中此標(biāo)識符(名稱)稱為“宏名稱”,預(yù)編譯時將宏名稱替換為字符串的過程稱為“宏展開”。 define是宏定義命令。 包括#定義pi3. 1415926音頻主()浮動、s、r和v。 打印機(輸入射線3360 ); scanf(%f,例如,沒有殘奧儀表的宏定義,input ra
3、dius: 4,運行情況如下:1=25.1328 s=50.2655 v=150.7966,(1)宏名稱,但是,這不是規(guī)定,也可以使用小寫字母(2)通過使用宏名代替1個字符串,可以減少在程序中反復(fù)寫入某個字符串的工作量。 (3)宏定義是將1個字符串置換為宏名,只進(jìn)行單純的置換,不進(jìn)行正確性檢查。 只有在編譯宏展開的源程序時才會發(fā)現(xiàn)語法錯誤并報告錯誤。 說明:(4)宏定義不是句子,不需要在行末加分。 加分號可以和分號一起被替換。 (5) define命令出現(xiàn)在程序中的函數(shù)之外,宏名的有效范圍是定義命令,直到父文件結(jié)束為止。 通常,define命令寫在文件的開頭,在函數(shù)之前,作為文件的一部分在該文
4、件范圍內(nèi)有效。 (可以使用undef命令退出宏定義的范圍。 范例:說明: #define G 9.8 _ void main() G的范圍- #undef G f1()可讓您靈活地控制巨集定義的適用范圍。 (7)在進(jìn)行宏定義時,能夠引用已定義的宏名,并能夠分層置換。 說明: # include # definer3.0#定義pi3. 1415926 #定義l2* pi * r #定義pi * r *修改()。 L=18.849556 S=28.274333,示例9.2參照宏定義中定義的宏名稱,宏展開后,printf函數(shù)的輸出項展開為: 2*3.1415926*3.0,展開為3.141133,(
5、8)程序中的雙倍(9)宏定義是預(yù)處理命令中特殊化的專用名詞,與定義變量的意義不同,只進(jìn)行文字置換,不分配存儲空間。 說明:9.1.2帶殘奧儀表的宏定義、作用:不進(jìn)行簡單的字符串替換,也進(jìn)行殘奧儀表替換。帶殘奧儀表的宏定義一般形式為:在define宏名(殘奧儀表表)字符串中包含括號中指定的殘奧儀表,#define S(a,b ) a * barea=s (3,2 );程序中將宏定義中的形式殘奧儀表和b分別置換為*,將s (3,2 )置換為*。 因此,代入語句展開為area=3*2,示例:并且具有實際關(guān)殘奧字元數(shù)的宏(示例: s (3,2 ) )由define命令行中指定的字符串從左到右替換。 如
6、果字符串包含宏中的形狀殘奧儀表(a、b等),則使用程序中相應(yīng)的實際殘奧儀表(常數(shù)、變量、表達(dá)式等)而不是形狀殘奧儀表。 如果宏定義字符串中的字符不是殘奧元字符(如*的*符號),則保留。 這將形成被替換的字符串。 中的組合圖層性質(zhì)變更選項。 帶殘奧儀表的宏定義展開為# include # define pi3. 1415926 # defines (r ) pi * r * rvoidmain () floata,區(qū)域。 a=3.6; area=S(a ); printf(r=%fnarea=%fn,a,area ) :運行狀況如下:=3.600000 area=40.715038,使用例9.3
7、帶殘奧參數(shù)的宏,代入語句“area=S(a ); 宏展開后: area=3.1415926*; (1)展開帶有殘奧儀表的宏,不是define命令行中的殘奧儀表,而是語句中宏名后面括號內(nèi)的實際殘奧儀表字符串。 (2)在宏定義中,宏名稱和帶參數(shù)的括號之間不得加空格。 否則,空格之后的字符將成為替代字符串的一部分。 說明:(1)函數(shù)調(diào)用時,先求出實際殘奧儀表式的值,再代入波形殘奧儀表。 只有簡單的字符替換使用帶有殘奧儀表的宏。 (2)函數(shù)調(diào)用在程序執(zhí)行時處理,并且臨時存儲器單元被分配到波形殘奧儀表。 另一方面,宏展開在編譯前進(jìn)行,展開時不分配存儲單元,沒有值的傳遞處理,也沒有“門值”的概念。 (3)
8、函數(shù)中的實際殘奧儀表和波形殘奧儀表類型的要求一致。 宏名沒有類型,其殘奧儀表也沒有類型,只是符號代表,只要進(jìn)入展開時代指定的字符串即可。 對于宏定義,字符串可以是任何類型的數(shù)據(jù)。 (4)調(diào)用函數(shù)只能得到一個門值,可以在宏中得到一些結(jié)果。 帶參數(shù)的宏與函數(shù)的區(qū)別: # include # define pi3. 1415926 # define circle (r、l、s、V) L=2*PI*R; S=PI*R*R; v=4.0/3.0* pi * r * r *視頻浮點、l、s和v。 通過掃描(% f,例如9.4宏展開得到了一些結(jié)果,void main ()浮點r、l、s、v; 掃描(% f
9、),預(yù)編譯宏并展開的主函數(shù)如下:3.5 r=3.50,l=21.99,s=38.48,v=179.59。 (6)宏置換不占用執(zhí)行時間,只占用編譯時間。 函數(shù)調(diào)用占執(zhí)行時間(分配單元、保留現(xiàn)場、值傳遞、回復(fù))。 帶殘奧儀表的宏與函數(shù)的區(qū)別:如果能很好地利用宏定義,可以實現(xiàn)程序的簡化。 例如,預(yù)先定義程序中的“輸出格式”,減少每次在輸出語句中寫入具體的輸出格式的工夫。 例如,通過9.5宏展開得到一些結(jié)果,# include # defineprintf # definen ln # defined % d # defined1dnl # dnl # defined3char string=Chin
10、a; a=1; b=2; c=3; d=4; PR(D1,a ); PR(D2,a,b ); PR(D3、a、b、c ); PR(D4、a、b、c、d ); pr (字符串); 運行時輸出結(jié)果:“包括文件”操作意味著一個源文件可以包括另一個源文件的所有內(nèi)容。 語言提供了使用#include命令實現(xiàn)文件包含的操作。 其一般形式為: #include文件名或#include,9.2“包含文件”處理,例9.6將例95點格式宏作為頭文件,并將其包含在用戶程序中。(1)設(shè)定格式宏為標(biāo)頭文件format.h # include # defineprintf # definen ln # defined %
11、 d # defined1dnl # defined2dnl的定義d4d dnl # define includeincludeformat.hvoidmain () inta、b、c字符串=China; a=1; b=2; c=3; d=4; PR(D1,a ); PR(D2,a,b ); PR(D3、a、b、c ); PR(D4、a、b、c、d ); pr (字符串); 注意:在編譯時分別編譯兩個文件,然后在編譯預(yù)處理后將頭文件format.h包含在主文件中,以獲取新的源程序并編譯該文件,而不是連接這些目標(biāo)程序包含的文件將成為新源文件的一部分,而目標(biāo)文件將單獨生成。 (1)一個#inclu
12、de命令只能指定一個包含文件。 如果要包含文件,請使用#include命令。 (2)如果文件包含文件,文件使用文件的內(nèi)容,則文件可以使用2個include命令分別包含文件和文件,文件必須在文件之前,即在file1.c中定義。 (3)可以在一個被包含的文件中包括另一個被包含的文件,即,可以嵌套該文件的包含。 說明:(#include命令中,文件名可以用雙撇號或尖括號括起來。 (5)所包括的文件(file2.h )和其駐留的文件(#include命令的源文件2.c )在預(yù)編譯之后是相同的文件而不是兩個文件。 因此,如果file2.h具有全局靜態(tài)變量,則在file1.h文件中也是有效的,不需要在extern中聲明。 說明:9 .條件編譯、概念:“條件編譯”
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 探索化學(xué)奧秘:初中化學(xué)實驗設(shè)計與探究教學(xué)大綱
- 在線教育平臺課程研發(fā)手冊
- 農(nóng)業(yè)項目立項申請報告怎么寫
- 部門間往來文書范例與指南
- 農(nóng)業(yè)現(xiàn)代化智能種植大數(shù)據(jù)分析平臺
- 三農(nóng)產(chǎn)品冷鏈物流運作手冊
- 基坑支護工程安全施工方案
- 三農(nóng)產(chǎn)業(yè)發(fā)展規(guī)劃作業(yè)指導(dǎo)書
- 新能源汽車充電樁前景
- 酒店財務(wù)管理的技巧和要點作業(yè)指導(dǎo)書
- 第十八屆“地球小博士”全國地理知識科普競賽題庫(附答案)
- 2023版北京協(xié)和醫(yī)院重癥醫(yī)學(xué)科診療常規(guī)
- 千里江山圖解析課件
- 《現(xiàn)代漢語常用字表》3500個漢字
- 道路通行能力計算題
- 經(jīng)濟學(xué)基礎(chǔ)完整版ppt-全體教學(xué)教程課件最新
- JJF(湘) 09-2018 純水-超純水系統(tǒng)監(jiān)測儀表(電導(dǎo)率)計量校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- SJG 82-2020 政府投資學(xué)校建筑室內(nèi)裝修材料空氣污染控制標(biāo)準(zhǔn)-高清現(xiàn)行
- 智慧園區(qū)平臺用戶操作手冊
- 精品市政道路施工測量方法及測量方案
- 小型手推清掃車畢業(yè)設(shè)計說明書課件
評論
0/150
提交評論