#include有两种用法:
- #include <stdio.h>
- #include “test.h”
使用尖括号< >
,编译器会从系统路径下查找头文件; 使用双引号" "
,编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。 总的来说,双引号" "
的查找路径比尖括号< >
的大。
注意:
- 标准库内的头文件来说用尖括号或者双引号都可以成功引入,自己写的头文件只能用双引号来引入
- 虽然说标准库内的都文件用双引号也能成功引入,但是双引号引用的话需要先从当前目录搜索一遍,所以相当于浪费了一些搜索的时间,所以建议自己写的头文件用双引号,标准库的头文件直接用尖括号进行引入
- 文件包含允许嵌套:在一个被包含的头文件中可以包含另一个文件
避免重复的操作(条件编译与#pragma once)
虽然说在我们自己个人写代码的过程中一般不会出现头文件引用重复的情况,但是在大型项目的编写过程中,若没有事先注意,就会出现如下面这样的情况:
comm.h和comm.c是公共模块。 test1.h和test1.c使用了公共模块。 test2.h和test2.c使用了公共模块。 test.h和 test.c使用了test1模块和test2模块。
编译过程中编译器会将头文件的内容复制到代码中,这样最终程序中就会出现两份comm.h的内容。这样就造成了文件内容的重复。
那么如何解决这个问题呢?
答案:条件编译。
在自己编写的每个头文件中,开头写形如以下的内容:
#ifndef __TEST_H__
#define __TEST_H__
//头文件的内容
#endif //__TEST_H__
或者:
#pragma once
就可以避免头文件的重复引入
注:标准库中的头文件已经帮我们考虑到了这样的情况,已经做好了这样的工作,因此我们需要做到的就是,作为写头文件的程序员,我们自身需要做好这样的工作。