以“#”开头的预处理命令一般都放在函数之外,而且一般放在源文件前面,他们成为预处理部分。
预处理指的是进行编译的第一遍扫描(语法扫描和语法分析)之前所作的工作。它由预处理程序负责完成。当对一个源文件进行编译时,系统自动引用预处理程序对预处理部分进行处理,处理完毕后自动进入对源程序的编译。
C语言的预处理功能主要有:
- 宏定义
- 文件包含
- 条件编译
宏定义
用一个标识符来表示字符串,称为“宏”,标识符称为宏名。在编译预处理阶段,所有宏名会被宏定义中的字符串替代,称为“宏展开”或“宏代换”。宏分为无参宏和有参宏。
无参宏定义
宏名后不带参数
格式:#define 标识符 字符串
字符串可以是常数、表达式、格式串,为了宏代换不出现错误,字符串最好加括号
宏定义作用域为宏定义命令到源程序结束,可以用#undef提前终止作用域
带参宏定义
格式:#define 宏名(形参表) 字符串
文件包含
作用是把指定文件插入命令行位置取代命令行,从而把指定文件和当前源程序文件连成一个源文件。
格式:#include "文件名"
#include <文件名>
使用<>表示在包含文件目录中去查找(包含目录是用户在设置环境时设置的),而不在源文件目录查找。
使用“”表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。
条件编译
条件编译功能可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。对于程序的移植和调试很有用。
三种形式
1、
#ifdef 标识符
程序段1
#else //若程序段2为空,则可以省略
程序段2
#endif
2、
#ifndef 标识符 //if no define
程序段1
#else //若程序段2为空,则可以省略
程序段2
#endif
3、
#ifdef 常量表达式 //根据常量表达式的值判断
程序段1
#else //若程序段2为空,则可以省略
程序段2
#endif