文件包含
除宏定义和条件编译之外,文件包含也是一种预处理语句,它的作用就是将一个源程序文件包含到另外一个源程序文件中。文件包含常用的格式有以下两种。
格式一:
#include <文件名>
格式二:
#include "文件名"
上述两种格式都可以实现文件包含,不同的是,格式一是标准格式,当使用这种格式时,C编译系统将在系统指定的路径下搜索尖括号(< >)中的文件;当使用格式二时,系统首先会在用户当前工作目录中搜索双引号("")中的文件,如果找不到,再按系统指定的路径进行搜索。
编写C语言程序时,一般使用第一种格式包含C语言标准库文件,使用第二种格式包含自定义的文件。
下面通过一个案例演示文件包含的用法,该案例的项目定义了两个文件:foo.h和project.c,在文件foo.h中定义了一个宏NUM,project.c文件需要引用宏NUM,则可以在project.c文件中包含文件foo.h,具体实现如例1所示。
例1 project.c
foo.h
1 #define NUM 15
project.c
1 #include <stdio.h> //包含标准库文件stdio.h
2 #include "foo.h" //包含自定义文件foo.h
3 int main()
4 {
5 int num = NUM;
6 printf("num = %d\n", num);
7 return 0;
8 }
例1运行结果如图1所示。
图1 例1运行结果
在例1中,在project.c文件中,第1~2行代码包含了标准库文件stdio.h和自定义文件foo.h;第5行代码引用了foo.h中定义的宏NUM;第6行代码调用stdio.h文件中的printf()函数输出了num的值。由图1可知,程序成功获取到了foo.h中的NUM值,并将其输出到控制台。
在预处理中,project.c文件中的#include预编译指令将被包含文件的内容插入到该预编译指令的位置,代码会被替换成如下形式:
//插入stdio.h标准库文件内容
#define NUM 15 //将foo.h文件内容插入到该位置
int num = 15; //将宏NUM替换为15
printf("num = %d\n", num);