第7章编译预处理命會 2004年3月 河北建筑工程学院
第7章 编译预处理命令 2004年3月 河北建筑工程学院
编译预处理是C++编译系统的一个重要组成部分,它负 责分析处理几种特殊的指令,这些指令被称为预处理命令。 在C++源程序文件中,加入编译预处理命令,可以改进程 序设计环境,提高编程效率。但它们不是C++语言的组成 部分,不能直接对它们进行编译,编译系统在对源程序进 行正式的编译之前,必须先对这些命令进行预处理,经过 预处理后的程序不再包括预处理命令,然后由编译系统对 预处理后的源程序进行通常的编译处理,得到可供执行的 目标代码 C++提供的预处理命令主要有以下三种: 宏定义 文件包含 条件编译 这些命令均以#开头,每行一条命令,因为它们不是C++ 的语句,所以命令后无分号
编译预处理是C++编译系统的一个重要组成部分,它负 责分析处理几种特殊的指令,这些指令被称为预处理命令。 在C++源程序文件中,加入编译预处理命令,可以改进程 序设计环境,提高编程效率。但它们不是C++语言的组成 部分,不能直接对它们进行编译,编译系统在对源程序进 行正式的编译之前,必须先对这些命令进行预处理,经过 预处理后的程序不再包括预处理命令,然后由编译系统对 预处理后的源程序进行通常的编译处理,得到可供执行的 目标代码。 C++提供的预处理命令主要有以下三种: 宏定义 文件包含 条件编译 这些命令均以#开头,每行一条命令,因为它们不是C++ 的语句,所以命令后无分号
7.1宏定义 宏定义分为两类:不带参数的宏定义和带参数的宏定义。 711不带参数的宏定义 # define称为宏定义指令,它的一般格式为: # define标识符字符串 作用:用一个指定的标识符来代表一个字符串,字符串可以 是常量、关键字、语句、表达式,还可以是空字符 其中,标识符又称为宏名,字符串称为宏体。 编译预处理时,如果程序中出现宏定义命令,预处理程序就 把该命令以后的程序中所有同宏名一致的标识符全部替换为 所定义的宏体,这个过程称为“宏展开
7.1 宏定义 宏定义分为两类:不带参数的宏定义和带参数的宏定义。 7.1.1 不带参数的宏定义 #define称为宏定义指令,它的一般格式为: #define 标识符 字符串 作用:用一个指定的标识符来代表一个字符串,字符串可以 是常量、关键字、语句、表达式,还可以是空字符。 其中,标识符又称为宏名,字符串称为宏体。 编译预处理时,如果程序中出现宏定义命令,预处理程序就 把该命令以后的程序中所有同宏名一致的标识符全部替换为 所定义的宏体,这个过程称为“宏展开
例如: PI来代替字符串 3.1415926” #define pi 3.1415926 ※注意:在预编译处理时,将程序中在该命令以后 出现的所有的P都用“3.1415926”代替。 【例71】输入圆半径,求圆周长、圆面积、球体积。 cout<<inputradius: <<endl; #include <iostream.h> cin>>re #define pi 3.1415926 =2*PIr; void maino s=PEror; =4.03.02 PIrrie; double ls, r,vi
例如: #define PI 3.1415926 PI来代替字符串 “3.1415926” ※ 注意: 在预编译处理时,将程序中在该命令以后 出现的所有的PI都用“3.1415926”代替。 【例7.1】 输入圆半径,求圆周长、圆面积、球体积。 #include <iostream.h> #define PI 3.1415926 void main() { double l,s,r,v; cout<<"inputradius:"<<endl; cin>>r; l=2*PI*r; s=PI*r*r; v=4.0/3.0*PI*r*r*r;
程序运行结果: input radius: 6 l=37.6991 s=113.097 v=904.779 说明: (1)宏名一般用大写字母表示,以便与变量名相区别。 2)使用宏名代替一个字符串,可以减少程序中重复书写 某些字符串的工作量,当需要改变某一个常量时,可以只 改变# define命令行,做到一改全改,不容易出错
程序运行结果: input radius: 6 l=37.6991 s=113.097 v=904.779 说明: (1) 宏名一般用大写字母表示,以便与变量名相区别。 (2) 使用宏名代替一个字符串,可以减少程序中重复书写 某些字符串的工作量,当需要改变某一个常量时,可以只 改变#define命令行,做到一改全改,不容易出错