《C程序设计》(第三版)第9章-预处理命令_第1页
《C程序设计》(第三版)第9章-预处理命令_第2页
《C程序设计》(第三版)第9章-预处理命令_第3页
《C程序设计》(第三版)第9章-预处理命令_第4页
《C程序设计》(第三版)第9章-预处理命令_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章预处理命令

是在编译前进行的一种编译预处理;然后再将处理的结果,与源程序一起编译。

本章介绍C语言的三种编译预处理命令:#define、

#include和#if。

均以字符“#”开头,一行只能写一条,不是C语言的语句,无分号“;”

。1源文件*.c运行文件*.exe编译编译编译目标文件*.obj连接编译连接连接编译预处理编译编译预处理包括:

宏定义#define

文件包含#include

条件编译#if

编译预处理2#define

宏名

字符串宏定义的功能:

在进行编译前,用字符串原样替换程序中的宏名。这个替换过程称为“宏替换”或“宏展开”,字符串也称为替换文本。

命令的一般格式:1不带参数的宏定义9.1宏定义#define

例如:#definePI

3.14main(){floatr,s,c;

scanf(“%f”,&r);s=PI*r*r;

printf(“PI=%f,s=%f”,PI,s);}替换3.143.14编译②为了增加程序的可读性,建议宏名用大写字母,其他的标识符用小写字母。③双引号中有与宏名相同的字符串不进行替换。④已经定义的宏名可以被后定义的宏名引用。在预处理时将层层进行替换。说明:①宏定义的作用域是从定义处开始到源文件结束,但根据需要可用undef命令终止其作用域。形式为:

#undef

宏名源程序:#definePI3.14#defineSPI*r*r#defineV4*S*r/3voidmain(){floatr;

printf("\nInputr:");

scanf("%f",&r);

printf("S=%.2fV=%.2f\n",S,V);}编译预处理后的程序:voidmain(){floatr;

printf("\nInputr:");

scanf("%f",&r);

printf("S=%.2fV=%.2f\n",3.14*r*r,4*

3.14*r*r

*r/3);}SVSV进入编译例如:命令的一般形式2带参数的宏定义#define宏名(形参表)

字符串功能:

在编译预处理时,把源程序中所有带参数的宏名用宏定义中的字符串替换,并且用宏名后圆括号中的实参替换字符串中的形参。例如:#defineMAX(X,Y)((X)>(Y)?(X):(Y))【例2】带参数的宏定义。#defineMAX(x,y)((x)>(y)?(x):(y))voidmain(){…

printf("%d\n",MAX(a,b));

printf("%d\n",MAX(a+m,b+n));}分两次替换:①将宏名MAX(a,b)

替换成字符串((x)>(y)?(x):(y))。②用实参a替换形参x,实参b替换形参y。程序中的两个printf语句被展开为:printf("%d\n",((a)>(b)?(a):(b)));printf("%d\n",((a+m)>(b+n)?(a+m):(b+n)));【例3】分析下面程序运行后的输出结果。#defineMA(x)x*(x-1)voidmain(){inta=1,b=2;

printf("%d\n",MA(1+a+b));}分两次替换:

①MA(1+a+b)

用x*(x-1)

替换。②用1+a+b替换x。printf语句被展开为:printf("%d\n",1+a+b*(1+a+b-1));特别注意:由于替换文本中的x没有用括号括起,因此,1+a+b也不能用括号括起。程序输出结果:81).命令的一般形式 格式1:#include<文件名>格式2:#include"文件名"

文件包含是将指定的某个源文件的内容全部包含到当前文件中。用include命令实现。用格式1,预处理程序仅在编译系统安装目录下查找指定文件。用格式2,预处理程序首先在当前目录中查找指定文件,若找不到再到系统安装目录中查找。9.2包含命令#include

#include<stdio.h>#include“e:\f2.c”Af.c

Bf2.c

CStdio.hAf.c

B

C注意:一行只能包含一个文件,若要包含多个文件则要写多行#include命令!预处理前:预处理后的源程序:编译器对预处理后的源程序进行编译。11有一个名为init.txt的文件,内容如下:#defineHDY(A,B)A/B#definePRINT(Y)printf(“y=%d\n”,Y)有以下程序:#include”init.txt”main(){inta=1,b=2,c=3,d=4,k;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论