c語言程序設計 預處理_第1頁
c語言程序設計 預處理_第2頁
c語言程序設計 預處理_第3頁
c語言程序設計 預處理_第4頁
c語言程序設計 預處理_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

國守銅畫盥舉

#include<math.h>

A第六章

#defineEPS1

voidmain

1里1方由定義函數(shù)原型說明

doub

doubleerm!

while(

n=n+l;

信息科學技術學院c語言程序設計教學組

±||

第六章預處理

內容提要:

宏定義概念與定義形式宏定義

宏定義與函數(shù)調用的區(qū)別宏與函數(shù)的區(qū)別

文件包含文件包含

條件編譯條件編譯

第六章預處理

編譯時預處理是C語言區(qū)別于其它高級語言

的特征之一,即在通常的編譯(包括詞法、

語法、代碼生成、優(yōu)化等)之前,先對程序

中的特殊命令進行“預處理”,然后再進行編

譯。

預處理功能主要有三種:

⑴宏定義;⑵文件包含;⑶條件編譯。

9.1宏定義

宏定義就是用一個宏名代替一個字符

串,以簡化編程,提高程序的可讀性;

宏定義的一般格式:

#define宏名替換字符串

注意:宏名必須定義在前引用在后,

其后不要加“;”號。

宏定義的一般格式:

#define宏名替換字符串

宏定義指令的最終作用是要求預編譯器

在源程序中尋找宏名,并將所有的這些

“宏名”用“替換字符串”替換。

[例9-1]:求圓面積編程。說明:

?宏名習慣用大寫表

#definePI3.1415926示與變量區(qū)別;

#defineR3.0?宏定義就是用一個

#defineSPI*R*R宏名代替一個字符串

,以簡化編程;

voidmain(){?對宏定義的預處理

printf(narea=%f\n!\S);就是作逆向的置換;

?可以層層置換,先

定義的可被后者引用

voidmain(){

printf(narea=%f\n!\3.1415926*3?0*3.0);

[例9-1]:求圓面積編程。

#definePI3.1415926運行結果:

#defineR3.0area=28.274333

#defineS3.1415926*3.0*3.0

voidmain(){

printf(narea=%f\n!\S);

voidmain(){

printf(narea=%f\n!\3.1415926*3?0*3.0);

9.2帶參的宏定義

不僅可以進行簡單的字符替換,還可以進行

參數(shù)替換,改參數(shù)可以是表達式。

帶參宏定義的一般格式:

#define宏名(參數(shù))替換字符串

說明:相應實參可以是較復雜的表達式,此時為得到

正確的結果,應當在替換字符串的形式參數(shù)外面加上

一個括號。宏名與帶參數(shù)的括號之間不應加空格,非

則將出錯。

[例求圓面積編程。

9-2]:運行結果:

#definePI3.1415926area=40.715040

#defineS(r)PI*r*r

voidmain(){

doublea=3.6,area;

area=S(a);

printf(1!area=%f\n!1,area);

voidmain(){

doublea=3.6,area;

area=3.1415926*a*a;

printf(!!area=%f\n!\area);

[例9-2]:求圓面積編程。

運行結果:

#definePI3.1415926area=40.715040

#defineS(r)3.1415926*a*a

voidmain(){

doublea=3.6,area;

area=S(a);

printf(1!area=%f\n!1,area);

voidmain(){

doublea=3.6,area;

area=3.1415926*a*a;

printf(!!area=%f\n!\area);

[例9-3]:求圓面積編程。/當實參是較

#definePI3.1415926復雜的表達

式時,應當在

#defineS(r)3.1415926*(a+l)*(a+l)替換字符串

voidmain(){的形式參數(shù)

doublea=3.6,area;外面加上一

area=S(a+l);對括號!

printf(Harea=%f\n11,area);

voidmain(){

doublea=3.6,area;運行結果:

area=3.1415926^(a+l)^(a+l);area=66.476099

printf(narea=%f\n!\area);

二一II好」;G

br(jin@Lis1%edLc噓能f力£

9.3正確區(qū)分在形式上相似的宏與函數(shù)的概念

設有以下:

帶參的宏:S(a+1)函數(shù)調用:sqrt(a+1.5)

宏定義與函數(shù)調用的區(qū)別有:

帶參宏定義函數(shù)調用

處理時間在預編譯時處理在程序運行時處理

只作簡單的字符替先求表達式的值,然后

換,不進行值的傳進行形實結合的數(shù)據(jù)傳

操作內容

遞,也沒有返回值遞,返回一個值,有類

和類型的概念型的概念。

0iTDgran^TOVQgLa-ngn^gea第六章

[例課堂實踐,閱讀程序給出結果。

,9-4]:

#defineFUDGE(K)K+3.14159

Hn

#definePR(a)printf(%3d5(int)(a))

#definePRINT(a)PR(a);printf(n%4d\nlf,++a)

voidmain(){

inti,x=2;

PR(x^FUDGE(2));

for(i=0;i<5;i++)

PRINT(i);

——

bqN蛔J&山1.電段威

[例9-4]:課堂實踐,閱讀程序給出結果。

#defineFUDGE(K)K+3.14159

#definePR(a)printf(H%3d!\(int)(a))

#definePRINT(a)PR(a);printf(n%4d\n,\++a)

voidmain(){

建議:先作預處理,

inti,x=2;

即進行宏名的替換,

PR(x*FUDGE(2));然后再根據(jù)語法規(guī)

for(i=0;i<5;i++)則進行運算。

PRINT(i);

A第六章

#defineFUDGE(K)K+3.14159

^definePR(a)printf(*%3d*,(int)(a))

^definePRINT(a)PR(a);printf("%4d\n”,++a)

voidmain(){

inti,x=2;

PR(x*FUDGE(2));

for(i=0;i<5;i++)PRINT(i);

)

voidmain(){

inti,x=2;

printfCr%3dz;(int)(x*2+3.14159));

for(i=0;i<5;i++)

printf("%3d”,(int)(i));運行結果:

7012346

printf("%4d\n”,++i);

9.4文件包含

文件包含是指將另外的文件包含到本文件之中

文件包含一般格式:

#incIude<fiIename>或

#incIude"filename”

說明:fiIename可以是:

“*.h”標題文件(頭文件)。其中包含

一些庫函數(shù)的原型說明、公用性的符號常數(shù)、

帶參的宏定義、類型的定義、全局變量等。

9.4文件包含

文件包含是指將另外的文件包含到本文件之中

文件包含一般格式:

#incIude<fiIename>或

#incIude"filename”

說明:fiIename可以是:

“*.c”源程序等文件,即另一個指定文

件的全部內容。

filel.c

頸編譯math.h

#include<math.h>

模塊A模塊B

編譯模塊B

模塊AC程序的編

譯運行過程

,庫函數(shù)

目標

舞接或其它目

模塊標程序,

執(zhí)行結果

運行

9.5條件編譯

通過條件編譯指令,可以控制編譯器有選擇

地進行編譯,滿足條件時編譯某一組語句,否

則編譯另一組語句。

利用條件編譯指令,可以控制產生不同的版

本,對于程序調試、移植都是非常有用的。

幾種常用的條件編譯結構:

結構一:#ifdef標識符

程序段1

[#eIse

程序段2]

#endif

/編譯條件的真假由標識符是否在此之前用#define

指令定義過來決定。其中#else部分是可選的。

結構二:#ifndef標識符/結構二的作用與

程序段1結構一陣好相反,如

[#eIse果標識符未被定義過

程序段2],編譯程序段1,否

#endif則編譯程序段2。

結構三:#if表達式e/結構三中,當表

程序段1達式e的值為非0時,

[#eIse條件成立,編譯程序

程序段2]段1,否則編譯程序

#endif段2。

結構四:

/結構四中,預編譯

#if常量表達式ei

程序將依順序計算表

程序段1

達式ei的值,當計算到

#eIif常量表達式e2

溫馨提示

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

評論

0/150

提交評論