预处理概念

  1. 预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时, 系统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译。<br />C语言提供了多种预处理功能,如宏定义、文件包含、 条件编译等。合理地使用预处理功能编写的程序便于阅读、修改、 移植和调试,也有利于模块化程序设计。<br />经过预处理后程序可由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。

预处理功能

C提供的预处理功能主要有以下三种:

1.宏定义
   2.文件包含
   3.条件编译
这些功能分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。例如:
#define #include #ifdef

说明:

宏名一般习惯用大写字母表示,以便与变量名相区别。但这并非规定,也可用小写字母。宏定义不是c语句,不必在行末加分号。如果加了分号则会连分号一起进行置换。
define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。通常,#define命令写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。可以用#undef命令终止宏定义的作用域。

预处理命令使用

文件包含

所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。C语言提供了#include命令用来实现“文件包含”的操作。
其一般形式为:
#include “**文件名” #include <文件名>
image.png
说明:**
(1) 一个#include命令只能指定一个被包含文件,如果要包含n个文件,要用n个#include命令。
(2) 在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。
(4) 在#include命令中,文件名可以用双撇号或尖括号括起来。
(5) 被包含文件(file2.h)与其所在的文件(即用#include命令的源文件file2.c),在预编译后已成为同一个文件(而不是两个文件)。因此,如果file2.h中有全局静态变量,它也在file1.h文件中有效,不必用extern声明。

条件编译:

image.pngimage.png
头文件内一般使用第二种方式进行预编译。