预处理是在编译之前的处理,而编译工作的任务之一是语法检查,预处理不做语法检查。预处理命令以符号“#”开头。
  常用的预处理指令包括:
  宏定义:#define
  文件包含:#include
  条件编译:#if、#elif、#ifndef、#ifdef、#endif、#undef
  错误信息指令:#error
  #line指令
  布局控制:#pragma
  宏定义
  宏定义又称为宏代换、宏替换,简称“宏”。宏替换只作替换,不做计算,不做表达式求解。宏定义分带参数的宏定义和不带参数的宏定义。在带参数的宏定义,宏名和参数的括号间不能有空格。
  宏定义不分配内存,变量定义分配内存。
  宏展开不占运行时间,只占编译时间;函数调用占运行时间(分配内存、保留现场、值传递、返回值)。
  出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串,有时把这种用法的#称为字符串化运算符。例如:
#include<iostream>
using namespace std;
#define STR(n)"abcd"#n
int main()
{
cout<<STR(6)<<endl;
system("pause");
return 0;
}
  输出结果为:

  ##运算符用于把参数连接到一起,预处理程序把出现在##两侧的参数合并成一个符号。例如:
#include<iostream>
using namespace std;
#define STR(a,b,c) a##b##c
int main()
{
cout<<STR(1,2,3)<<endl;
system("pause");
return 0;
}
  输出结果为:

  文件包含
  #include<文件名>称为标准方式,到系统头文件目录查找文件,#include"文件名"则先在当前目录(用户路径)查找,而后到系统头文件目录查找。
  我们以#include<iostream.h>和#include<iostream>为例说明:iostream.h是C语言格式的头(库)文件,为旧版本的标准库,只支持窄字符集;而iostream为C++的标准头文件,支持窄字符集和宽字符集。
  被包含文件中的静态全局变量不用在包含文件中声明。
  条件编译
  使用条件编译可以使目标程序变小,运行时间变短。
  #undef指令,用来删除事先定义的宏定义, 其一般形式为:#undef 宏替换名
  错误信息指令
  #error指令,该指令用于程序的调试,输出一个错误信息,当编译中遇到#error指令停止编译。其一般形式为: #error 出错信息。
#ifndef __cplusplus
#error this is not a C++ complier.
#endif
#include<iostream>
using namespace std;
int main()
{
system("pause");
return 0;
}