预处理程序又称预处理器,它包含在编译器中。预处理程序首先读源文件。预处理的输出是“翻译单元”,它是存放在内存中的临时文件。编译器接受预处理的输出,并将源代码转换成包含机器语言指令的目标文件。
预处理程序对源文件进行第1次处理,它处理的是预处理命令。C++提供的预处理命令主要有3种,分别是:文件包含命令、宏定义命令和条件编译命令。
这些命令在程序中都是以#开头的,每一条预处理命令必须单独占一行。由于不是C++的语句,因此在结尾没有分号。
1、文件包含命令
所谓“文件包含”是指将另一个源程序的内容合并到当前源程序中。C++程序提供了#include命令用于实现文件的包含操作,它有下列两种格式:
#include <文件名> // 使用<>括起来的头文件一般存在于C++系统目录中的include子目录中
#include "文件名" // 使用双引号括起来的头文件一般在当前文件所在的目录下
2、宏定义命令
使用#define来进行宏定义,宏定义一般有两种形式:不带参数的宏定义和带参数的宏定义。
#define PI 3.1415926 //不带参数的宏定义
#define S(a,b) a*b //带参数的宏定义
#undef PI //终止PI的作用域
使用宏定义的优点是减少了程序中重复书写某些字符串的工作量和出错率,提高了程序的通用性。
3、条件编译
对源程序中一部分内容只在满足一定条件时才进行编译,也就是对一部分内容指定编译的条件,这就是条件编译。C++提供的条件编译命令有以下3中形式:
//第一种
#ifdef DEBUG
cout << "x = " << x << " ,y = " << y << " ,z = " << z << endl;
#else
cout << "hahahahaha" << endl;
#endif
//第二种
#ifndef _头文件名_H
#define _头文件名_H
...
#endif
//第三种
#if 表达式1
程序段1
#elif 表达式2
程序段2
#elif 表达式3
程序段3
...
#else
程序段n
#endif