- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章2、多文件结构和编译预处理指令.ppt.Convertor
2.3、预处理指令
将程序编译过程分为预处理和正式编译两个步骤是C++的一大特点。在编译时,编译器中的预处理模块首先根据预处理命令对源程序进行适当加工,之后才正式进行编译。
预处理命令以符号“#”开头,且在一行只能书写一条预处理命令,结束时不能有“;”号。
C++中有三种主要的编译预处理命令:宏定义、文件包含和条件编译。
1)、宏定义
无参数定义通常用来定义符号常数,其格式为:
1
#define 宏名 替换序列
其中宏名是一个标识符。为了区别变量,习惯上无参宏名
名称只使用大写字母。例如:
#define PI 3.14159
该宏定义命令为常数3.14259起了一个符号化的名字PI。这
样,在该宏定义命令之后的程序中,用PI表示3.14259。
在定义宏时还可以加上参数,构成了带参数宏:
#define 宏名(参数表) 带有参数的替换序列
例如:
#define max(a,b) ((a)(b)?(a):(b))
带参数的宏有点像函数。如:
x=max(x,10);
即如果变量x的值小于10,则x=10,否则x的值保持不变。实际
上,这个带参数宏的确切含义为,通知编译程序中的预处理模
块在对应用程序进行处理时遇到max()时要进行转换,在转换时
2
还要对参数进行代换处理。上述宏定义经过转换后变为:
x=((x)(10)?(x):(10));
在利用宏命令定义带参数宏时,要注意宏名与括号之间有
无空格均可,且所有的参数均应出现在右边的替换序列中。
带参数宏与函数是有明显区别的,函数有形参和实参。而
宏只是编译时简单的替换。
撤消宏定义:
#define DEBUG 1//定义宏
#undef DEBUG //撤消宏
若程序中没有#undef DEBUG ,则宏起作用的范围至该程序
文件末尾。
2)、文件包含
编译预处理命令中的文件包含是指一个程序将另一个指定
文件的内容包含进来,即将另一个程序文件在编译时嵌入到本
文件中。文件包含操作的一般格式有以下两种:
3
#include文件名
按标准方式搜索,文件位于C++系统目录的include子目录下
#include文件名
首先在当前目录中搜索,若没有,再按标准方式索。
头文件一般包含以下几类内容(带#时不加分号,否则加分号):
(1)对类型的声明,class A
(2)函数声明,做引用性声明
(3)内置(内联)函数的定义(inline)
(4)宏定义
(5)全局变量定义
4
(6)外部变量的声明.如:extern int a;
(7)可以根据需要包含其它的头文件
3)、条件编译
条件编译是编译预处理命令的一种,用于对源
程序的内容进行选择性编译。有时需要根据特定的
条件对程序中的特定代码进行有选择的编译即为条
件编译。条件编译可以根据指定的条件得到不同的
编译结果,从而形成不同的可执行程序。
注意:预处理命令第一个非空的字符必须是#,在#之前
不能有其它非空字符。
格式1:
#ifdef 标识符
程序段1
#else
程序段2
#endef
当标识符已用#define定义过,则对程序段1进行编译,否则对程序段2进行编译。
格式2:
#ifundef 标识符
程序段1
#else
程序段2
#endef
6
表示:如果标识符没有用#define定义过,则对程序段1进行编译,否则编译程序段2。
格式3:
#ifdef 表达式1
程序段1
#elseif表达式2
程序段2
...........
#endif
表示:如果表达式1为真,就编译程序段1,当表达式2为真时,编译程序段2,.........
例如:下面的程序说明了条件编译的使用
#includeiostream.h
#define X 5
void main()
{
7
#ifdef X
cout定义了宏Xendl;
#else
cout没有定义宏 Xendl;
#endif
#if X1
coutX定义小于1endl;
#elif X2
coutX定义小于2endl;
#elif X3
coutX定义小于3endl;
#else
coutX定义大于等于3endl;
#endif
}
文档评论(0)