C++提供的预处理功能主要有以下3种
1、宏定义
2、文件包含
3、条件编译
为了与一般C++语句相区别,这些命令以符号#开头,而且末尾不包含分号
宏定义
用#define命令将一个指定的标识符(即宏名)来代表一个字符串。定义宏的作用一般是用一个短的名字代笔一个长的字符串。它的一般形式
#define 标识符 字符串
在C语言中用#define定义符号常量,由于C++已增加了const语句以定义常变量,因此#define在实际上已不多用
#define命令定义带参数的宏定义,一般形式
#define 宏名(参数表) 字符串
#define S(a, b) a*b // 定义宏S(矩形面积),a,b为宏的参数
“文件包含”处理
是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。C++提供了#define命令实现“文件包含”的操作。
在#include命令中,文件名除了可用尖括号括起来以外,还可以用双撇号括起来。
#include <iostream.h> 系统到系统目录中寻找要包含的文件,如果找不到,编译系统就给出出错信息。所谓系统目录是指存放C++系统的目录。
#include "iostream.h" 从当前目录中寻找
条件编译
希望程序中某一部分只在满足一定条件时才进行编译,也就是指定对程序中的一部分内容进行编译的条件。如果不满足这个条件,就不编译这部分内容。
(1)#ifdef 标识符
程序段1
#else
程序段2
#endif
作用是当所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段 1,否则编译程序段2。#endif 用来限定#ifdef的命令范围。其中#else部分也可以没有。
(2)#ifndef 标识符
程序段1
#else
程序段2
#endif
作用是若标识符未被定义过,则编译程序段一,否则编译程序段二
(3) #if 表达式
程序段 1
# else
程序段 2
#endif
是当指定的表达式值为真时就编译程序段1,否则编译程序段2。可以事先给定一定条件,使程序在不同的条件下执行不同的功能。