资源描述:
《C语言程序设计 教学课件 作者 姜海涛《C语言程序设计》第八章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章预处理指令主要内容宏替换1文件包含2本章要点及学习目标本章要点宏替换指令文件包含指令学习目标理解预处理的含义掌握简单宏替换和带参数宏替换的规则掌握宏替换指令和文件包含指令的使用方法预处理指令以字符“#”开头,后面跟不同的指令名,如#include、#define预处理指令不能直接进行编译。在编译之前必须对这些指令提前进行处理,即“预处理”。C语言中常用的预处理指令包括以下三类:宏替换、文件包含、条件编译。8.1宏替换8.1.1简单宏替换【例】编程实现求圆的周长、面积与球的体积。/*程序8-1*/#include
2、tdio.h>voidmain(){floatradius;floatc,s,v;printf(“请输入半径:”);scanf(“%f”,&radius);c=2*3.1415926*radius;s=3.1415926*radius*radius;v=4*3.1415926*radius*radius*radius/3;printf(“圆的周长为%f,圆的面积为%f,圆的体积为%f”,c,s,v);}8.1宏替换(续)在上述程序中,存在着如下问题:(1)常量3.1415926在程序中出现了三次,由于其包含字符较多
3、,给程序的编写带来一定的麻烦;(2)如果在程序编写中将某位置的3.1415926输入错误,则对应的部分结果将出现错误,从而造成结果的不一致。8.1宏替换(续)使用宏替换可以解决上面的问题,将程序8-1修改如下:/*程序8-2*/#include#definePI3.1415926voidmain(){floatradius;floatc,s,v;printf(“请输入半径:”);scanf(“%f”,&radius);c=2*PI*radius;s=PI*radius*radius;v=4*PI*ra
4、dius*radius*radius/3;printf(“圆的周长为%f,圆的面积为%f,圆的体积为%f”,c,s,v);}8.1宏替换(续)宏替换即用一个指定的标识符来代表一个替换序列,其一般形式为:#define标识符替换序列其中标识符被称为宏名,替换序列其实是一个字符序列(可以包含标识符、关键字、常数、字符串常量、运算符、标点符号等)。8.1宏替换(续)宏替换指令在程序编译前被预处理器处理,此时,预处理器将程序代码作为字符序列来对待,不考虑代码的含义。预处理器遇到一个宏替换指令时,会登记“标识符”代表“替换序列”
5、的信息,然后将后面的程序代码中出现的所有PI替换为3.1415926。替换完成后得到的程序代码和程序8-1相同。真正被编译执行的是替换后的代码。8.1.2带参数的宏替换其一般形式为:#define标识符(形式参数列表)替换序列其中形式参数列表中可以包含若干个参数(参数之间用逗号分隔),每个参数均为一个标识符。这些参数可以在替换序列中出现多次。在程序代码中,调用带参数宏替换的方式为:宏名(实际参数列表)其中每个实际参数均是一个字符序列(可以包含标识符、关键字、常数、字符串常量、运算符、标点符号等),实际参数的个数应和形式参数
6、的个数相同。8.1.2带参数的宏替换(续)预处理器遇到带参数的宏替换时,将登记相关的信息以便以后使用。在后面的程序代码中如果出现了宏调用,宏调用将被替换序列所取代,同时用每个实际参数替换对应的形式参数。/*程序8-3*/#include#definePI3.1415926#defineC(r)2*PI*r#defineS(r)PI*r*r#defineV(r)4*PI*r*r*r/3voidmain(){floatradius;floatc,s,v;printf(“请输入半径:”);scanf(“%f
7、”,&radius);c=C(radius);s=S(radius);v=V(radius);printf(“圆的周长为%f,圆的面积为%f,圆的体积为%f”,c,s,v);}8.1.2带参数的宏替换(续)程序8-3替换后得到如下程序#includevoidmain(){floatradius;floatc,s,v;printf(“请输入半径:”);scanf(“%f”,&radius);c=2*3.1415926*radius;s=3.1415926*radius*radius;v=4*3.14
8、15926*radius*radius/3;printf(“圆的周长为%f,圆的面积为%f,圆的体积为%f”,c,s,v);}使用宏替换指令需要注意(1)宏替换不是语句,因此指令的最后通常不加分号,错误的添加分号(分号将被作为替换序列的一部分)可能会导致替换后得到的程序代码出现语法错误。如:#def