欢迎来到天天文库
浏览记录
ID:50043736
大小:245.50 KB
页数:25页
时间:2020-03-08
《C语言程序设计 教学课件 作者 许薇 武青海 C语言第九章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章编译预处理和动态存储分配信息工程学院编译预处理和动态存储分配9.1编译预处理9.2动态存储分配9.1编译预处理编译指令(编译预处理指令):C源程序除了包含程序命令(语句)外,还可以使用各种编译指令(编译预处理指令)。编译指令(编译预处理指令)是给编译器的工作指令。这些编译指令通知编译器在编译工作开始之前对源程序进行某些处理。编译指令都是用“#”引导。编译预处理:编译前根据编译预处理指令对源程序的一些处理工作。C语言编译预处理主要包括宏定义、文件包含、条件编译。9.1.1不带参数宏定义(符号常量的宏定义)不带参数宏定义又叫符号常量的宏定义,在使用中需满足以下三个条件:1.不带参数宏定义
2、,一般格式为:#define标识符字符串其中:标识符即为宏名。2.宏调用:在程序中用宏名替代字符串。3.宏展开:编译预处理时将字符串替换宏名的过程,称为宏展开。这里,#define表示是宏定义命令。其中的字符串可以是常数、表达式或格式串等。通常,宏名习惯上用大写字母表示,与所对应的字符串之间用空格隔开。例如:#definePI3.1415功能是定义一个符号常量(宏名)PI代替字符串3.1415。【例9-1】宏定义简单应用#defineMACRONAME"Helloworld."/*MACRONAME是宏名*/main(){printf(MACRONAME);}程序运行结果:Hellowor
3、ld.说明:1.宏名遵循标识符规定,习惯用大写字母表示,以便区别普通的变量。2.#define之间不留空格,宏名两侧空格(至少一个)分隔。3.宏定义字符串不要以分号结束,否则分号也作为字符串的一部分参加展开。从这点上看宏展开实际上是简单的替换。例如:#definePI3.14;展开为s=3.14;*r*r;(导致编译错误)4.宏定义用宏名代替一个字符串,并不管它的数据类型是什么,也不管宏展开后的词法和语法的正确性,只是简单的替换。是否正确,编译时由编译器判断。例如:#definePI3.14照样进行宏展开(替换),是否正确,由编译器来判断。5.#define宏定义宏名的作用范围从定义命令开
4、始直到本源程序文件结束。可以通过#undef终止宏名的作用域。C语言允许宏带有参数,带参数的宏定义一般形式为:#define宏名(参数表)字符串其中的字符串中含有参数表中所指定的参数。带参数的宏调用的一般形式为:宏名(实参表);在宏定义中的参数称为形式参数,在宏调用中的参数为实际参数。对带参数的宏进行替换时,用宏调用提供的实参,直接替换宏定义命令行中相应的形参,非形参字符保持不变。9.1.2带参数宏定义例如:#defineAREA(r)3.1415*r*r经过上面的定义之后,在源程序中可以使用下面的赋值语句:s=AREA(5);经过宏替换后的语句为:s=3.1415*5*5;【例9-3】从
5、键盘上输入两个数据,比较大小并输出较大的数,定义宏实现。#defineMAX(x,y)(x>y)?x:ymain(){inta,b,max;printf("PleaseInputa,b:");scanf("%d%d",&a,&b);max=MAX(a,b);printf("Max=%d",max);}程序运行结果:PleaseInputa,b:3050Max=50带参数宏定义展开规则:在程序中如果有带实参的宏定义,则按照#define命令行中指定的“字符串”从左到右进行置换(扫描置换)。如果串中包含宏定义中的形参,则将程序中相应的实参代替形参,其它字符原样保留,形成了替换后的字符串。注
6、意:还是一个字符串的替换过程,只是将形参部分的字符串用相应的实参字符串替换。9.1.3文件包含文件包含是指一个源文件可以将另外一个源文件的全部内容包含进来。其命令的一般形式如下所示:#include"文件名"或#include<文件名>其中,文件名是被包含文件的文件名,它是一个磁盘文件。例如,file1.h文件的内容如下:inta;intb;file2.c文件的内容如下:#include"file1.h"main(){scanf("%d%d",&a,&b);printf("a+b=%d",a+b);}在对文件file2.c进行编译处理时,要对#include命令进行文件包含处理,用file
7、1.h的全部内容替换命令#include"file1.h"。如图9-2所示,经过编译预处理后,file2.c文件参加编译的内容如下:inta;intb;main(){scanf("%d%d",&a,&b);printf("a+b=%d",a+b);}说明:1.被包含的文件常常被称为“头文件”(#include一般写在模块的开头)。头文件常常以".h"为扩展名(也可以用其它的扩展名,.h只是习惯或风格)。2.一条#incl
此文档下载收益归作者所有