宏定義宏與函數(shù)的區(qū)別文件包含條件編譯PPT學(xué)習教案_第1頁
宏定義宏與函數(shù)的區(qū)別文件包含條件編譯PPT學(xué)習教案_第2頁
宏定義宏與函數(shù)的區(qū)別文件包含條件編譯PPT學(xué)習教案_第3頁
宏定義宏與函數(shù)的區(qū)別文件包含條件編譯PPT學(xué)習教案_第4頁
宏定義宏與函數(shù)的區(qū)別文件包含條件編譯PPT學(xué)習教案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、會計學(xué)1宏定義宏與函數(shù)的區(qū)別文件包含條件編宏定義宏與函數(shù)的區(qū)別文件包含條件編譯譯第六章 預(yù)處理 內(nèi)容提要:內(nèi)容提要:宏定義概念與定義形式宏定義概念與定義形式宏定義與函數(shù)調(diào)用的區(qū)別宏定義與函數(shù)調(diào)用的區(qū)別文件包含文件包含條件編譯條件編譯 宏定義 宏與函數(shù)的區(qū)別 文件包含 條件編譯第1頁/共23頁編譯時預(yù)處理是編譯時預(yù)處理是C C語言區(qū)別于其它高級語言語言區(qū)別于其它高級語言的特征之一,的特征之一, 即在通常的編譯(即在通常的編譯( 包括詞法、包括詞法、語法、代碼生成、優(yōu)化等語法、代碼生成、優(yōu)化等 )之前,先對程序)之前,先對程序中的特殊命令進行中的特殊命令進行“預(yù)處理預(yù)處理”,然后再進行編,然后再進

2、行編譯。譯。宏定義;宏定義;預(yù)處理功能主要有三種:預(yù)處理功能主要有三種:條件編譯。條件編譯。文件包含;文件包含;第六章 預(yù)處理第2頁/共23頁9.1 宏定義宏定義# #define define 宏名宏名替換字符串替換字符串宏定義的一般格式:宏定義的一般格式:# #define define 宏名宏名替換字符串替換字符串宏定義的一般格式:宏定義的一般格式:宏定義就是用一個宏名代替一個字符宏定義就是用一個宏名代替一個字符串,以簡化編程,提高程序的可讀性;串,以簡化編程,提高程序的可讀性;注意:注意:宏名必須定義在前引用在后,宏名必須定義在前引用在后,其后不要加其后不要加“;”號。號。第3頁/共2

3、3頁宏定義指令的最終作用是要求預(yù)編譯器宏定義指令的最終作用是要求預(yù)編譯器在源程序中尋找宏名,并將所有的這些在源程序中尋找宏名,并將所有的這些“宏名宏名”用用“替換字符串替換字符串”替換。替換。# #define define 宏名宏名替換字符串替換字符串宏定義的一般格式:宏定義的一般格式:# #define define 宏名宏名替換字符串替換字符串宏定義的一般格式:宏定義的一般格式:第4頁/共23頁第5頁/共23頁運行結(jié)果:area=28.274333第6頁/共23頁9.2 帶參的宏定義帶參的宏定義說明:說明:相應(yīng)實參可以是較復(fù)雜的表達式,此時為得到相應(yīng)實參可以是較復(fù)雜的表達式,此時為得到正

4、確的結(jié)果,應(yīng)當在替換字符串的形式參數(shù)外面加上正確的結(jié)果,應(yīng)當在替換字符串的形式參數(shù)外面加上一個括號。宏名與帶參數(shù)的括號之間不應(yīng)加空格,非一個括號。宏名與帶參數(shù)的括號之間不應(yīng)加空格,非則將出錯。則將出錯。不僅可以進行簡單的字符替換,還可以進行不僅可以進行簡單的字符替換,還可以進行參數(shù)替換,改參數(shù)可以是表達式。參數(shù)替換,改參數(shù)可以是表達式。# #define define 宏名宏名( (參數(shù)參數(shù)) ) 替換字符串替換字符串帶參帶參宏定義的一般格式:宏定義的一般格式:# #define define 宏名宏名( (參數(shù)參數(shù)) ) 替換字符串替換字符串帶參帶參宏定義的一般格式:宏定義的一般格式:第7頁

5、/共23頁運行結(jié)果:area=40.715040第8頁/共23頁第9頁/共23頁運行結(jié)果:area=66.4760993.1415926*(a+1)*(a+1)第10頁/共23頁9.3 正確區(qū)分在正確區(qū)分在形式上形式上相似的宏與函數(shù)的概念相似的宏與函數(shù)的概念設(shè)有以下設(shè)有以下: :帶參的宏:帶參的宏:S(a+1)S(a+1) 函數(shù)調(diào)用:函數(shù)調(diào)用:sqrt(a+1.5)sqrt(a+1.5)宏定義與函數(shù)調(diào)用的區(qū)宏定義與函數(shù)調(diào)用的區(qū)別有別有:先求表達式的值,然后先求表達式的值,然后進行形實結(jié)合的數(shù)據(jù)傳進行形實結(jié)合的數(shù)據(jù)傳遞,返回一個值,有類遞,返回一個值,有類型的概念。型的概念。只作簡單的字符替只作

6、簡單的字符替換,不進行值的傳換,不進行值的傳遞,也沒有返回值遞,也沒有返回值和類型的概念和類型的概念操作內(nèi)容操作內(nèi)容在程序運行時處理在程序運行時處理在預(yù)編譯時處理在預(yù)編譯時處理處理時間處理時間函數(shù)調(diào)用函數(shù)調(diào)用帶參宏定義帶參宏定義先求表達式的值,然后先求表達式的值,然后進行形實結(jié)合的數(shù)據(jù)傳進行形實結(jié)合的數(shù)據(jù)傳遞,返回一個值,有類遞,返回一個值,有類型的概念。型的概念。只作簡單的字符替只作簡單的字符替換,不進行值的傳換,不進行值的傳遞,也沒有返回值遞,也沒有返回值和類型的概念和類型的概念操作內(nèi)容操作內(nèi)容在程序運行時處理在程序運行時處理在預(yù)編譯時處理在預(yù)編譯時處理處理時間處理時間函數(shù)調(diào)用函數(shù)調(diào)用帶參

7、宏定義帶參宏定義第11頁/共23頁#define FUDGE(K) K+3.14159#define PR(a) printf(%3d,(int)(a)#define PRINT(a) PR(a); printf(%4dn, +a)void main()int i, x=2;PR(x*FUDGE(2);for(i=0; i5; i+)PRINT(i); 例例9 9- -4:4:課堂實踐課堂實踐,閱讀程序給出結(jié)果。,閱讀程序給出結(jié)果。第12頁/共23頁第13頁/共23頁運行結(jié)果:7 0 1 2 3 4 6第14頁/共23頁9.4 文件包含文件包含說明:說明:filenamefilename可以是

8、:可以是: “*.*.h h”標題文件(頭文件)。其中包含標題文件(頭文件)。其中包含一些庫函數(shù)的原型說明、公用性的符號常數(shù)、一些庫函數(shù)的原型說明、公用性的符號常數(shù)、帶參的宏定義、類型的定義、全局變量等。帶參的宏定義、類型的定義、全局變量等。文件包含是指將另外的文件包含到本文件之中文件包含是指將另外的文件包含到本文件之中# #include include 或或# #include include “filenamefilename”文件包含文件包含一般格式:一般格式:# #include include 或或# #include include “filenamefilename”文件包含文

9、件包含一般格式:一般格式:第15頁/共23頁9.4 文件包含文件包含說明:說明:filenamefilename可以是:可以是: “*.*.c c”源程序等文件,即另一個指定文源程序等文件,即另一個指定文件的全部內(nèi)容。件的全部內(nèi)容。文件包含是指將另外的文件包含到本文件之中文件包含是指將另外的文件包含到本文件之中# #include include 或或# #include include “filenamefilename”文件包含文件包含一般格式:一般格式:# #include include 或或# #include include “filenamefilename”文件包含文件包含一般

10、格式:一般格式:第16頁/共23頁執(zhí)行結(jié)果執(zhí)行結(jié)果執(zhí)行結(jié)果執(zhí)行結(jié)果模塊模塊A#include 模塊模塊Bmath.hfile1.c預(yù)編譯模塊模塊A#include 模塊模塊Bmath.hfile1.c預(yù)編譯模塊模塊A模塊模塊B模塊模塊A模塊模塊B編譯編譯目標目標模塊模塊可執(zhí)行可執(zhí)行程序程序庫函數(shù)庫函數(shù)或其它目或其它目標程序標程序鏈接目標目標模塊模塊可執(zhí)行可執(zhí)行程序程序庫函數(shù)庫函數(shù)或其它目或其它目標程序標程序鏈接運行運行C C程序的編程序的編譯運行過程譯運行過程第17頁/共23頁9.5 條件編譯條件編譯通過條件編譯指令通過條件編譯指令, ,可以控制編譯器有選擇可以控制編譯器有選擇地進行編譯,滿足

11、條件時編譯某一組語句地進行編譯,滿足條件時編譯某一組語句, ,否否則編譯另一組語句。則編譯另一組語句。利用條件編譯指令利用條件編譯指令, ,可以控制產(chǎn)生不同的版可以控制產(chǎn)生不同的版本,對于程序調(diào)試、移植都是非常有用的。本,對于程序調(diào)試、移植都是非常有用的。第18頁/共23頁結(jié)構(gòu)一:結(jié)構(gòu)一: # #ifdef ifdef 標識符標識符程序段程序段1 1#elseelse程序段程序段22# #endifendif幾種常用的條件編譯結(jié)構(gòu):幾種常用的條件編譯結(jié)構(gòu):編譯條件的真假由標識符是否在此之前用編譯條件的真假由標識符是否在此之前用# #definedefine指令定義過來決定。其中指令定義過來決定

12、。其中# #elseelse部分是可選的。部分是可選的。第19頁/共23頁結(jié)構(gòu)二:結(jié)構(gòu)二:# #ifndef ifndef 標識符標識符程序段程序段1 1#elseelse程序段程序段22# #endifendif結(jié)構(gòu)二的作用與結(jié)構(gòu)二的作用與結(jié)構(gòu)一陣好相反,如結(jié)構(gòu)一陣好相反,如果標識符未被定義過果標識符未被定義過,編譯程序段,編譯程序段1 1,否,否則編譯程序段則編譯程序段2 2。結(jié)構(gòu)三:結(jié)構(gòu)三:# #if if 表達式表達式e e程序段程序段1 1#elseelse程序段程序段22# #endifendif結(jié)構(gòu)三中,當表結(jié)構(gòu)三中,當表達式達式e e的值為非的值為非0 0時,時,條件成立,編譯

13、程序條件成立,編譯程序段段1 1,否則編譯程序,否則編譯程序段段2 2。第20頁/共23頁結(jié)構(gòu)四:結(jié)構(gòu)四:# #if if 常量常量表達式表達式e e1 1程序段程序段1 1# #elif elif 常量常量表達式表達式e e2 2程序段程序段2 2# #elif elif 常量常量表達式表達式e en n程序段程序段n n#else#else程序段程序段n+1n+1# #endifendif結(jié)構(gòu)四中,預(yù)編譯結(jié)構(gòu)四中,預(yù)編譯程序?qū)⒁理樞蛴嬎惚沓绦驅(qū)⒁理樞蛴嬎惚磉_式達式e ei i的值的值, ,當計算到當計算到某表達式某表達式e ek k的值為非的值為非0 0時,則程序段時,則程序段k k被編譯

14、被編譯,其后的表達式將不,其后的表達式將不再計算,其他的程序再計算,其他的程序段也將不被編譯。若段也將不被編譯。若所有表達式的都為所有表達式的都為0 0,則程序段則程序段n+1n+1被編譯。被編譯。第21頁/共23頁# #include include #include #include #define EPS 1e#define EPS 1e- -7 7void main()void main()double udf_sin(double x);double udf_sin(double x);/用戶自定義函數(shù)原型說明用戶自定義函數(shù)原型說明double a; scanf(%lf,&a);double a; scanf(%lf,&a);printf(%f %fprintf(%f %f n,udf_sin(a), sin(a);n,udf_sin(a), sin(a); double udf_sin( double x )double udf_sin( double x )/用戶自定義函數(shù)用戶自定義函數(shù)double sum, term, n=1; sum=term=x;double sum, term, n=1; sum=term=x;while( fabs(term)

溫馨提示

  • 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

提交評論