问题提出
在实际的开发中, 我们往往需要在不同的文件中,去调用其它文件的定义的函数,比如hello.c中, 去使用myfuns.c 文件中的函数, 如何实现?如下图就是引入了<stdio.h> 头文件。
头文件基本概念
- 头文件是扩展名为 .h 的文件, 包含了 C 函数声明和宏定义, 被多个源文件中引用共享。 有两种类型的头文件: 程序员编写的头文件和C标准库自带的头文件
- 在程序中要使用头文件, 需要使用 C 预处理指令
#include 来引用它。 前面我们已经看过 stdio.h 头文件, 它是C标准库自带的头文件 #include 叫做文件包含命令, 用来引入对应的头文件(.h文件)。 #include 也是C语言预处理命令的一种。#include 的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。- 建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件
工作原理图
快速使用
头文件head01.h 代码
#include <stdio.h>
#ifndef CSTUDY_HEAD01_H
#define CSTUDY_HEAD01_H
#endif
int say() {
printf("hello");
return 0;
}
源文件func02.c 代码
#include "head01.h"
int main() {
return say();
}
注意事项
- 引用头文件相当于复制头文件的内容
- 源文件的名字 可以不和头文件一样,但是为了好管理,一般头文件名和源文件名一样
- 注意:
include <> 和include "" 的区别 - 一个 #include 命令只能包含一个头文件,多个头文件需要多个 #include 命令
- 同一个头文件如果被多次引入,多次引入的效果和一次引入的效果相同,因为头文件在代码层面有防止重复引入的机制
- 在一个被包含的文件(.c)中又可以包含另一个文件头文件(.h)
- 不管是标准头文件,还是自定义头文件, 都只能包含变量和函数的声明,不能包含定义,否则在多次引入时会引起重复定义错误(!!!)
C语言中include <> 和include "" 的区别
include <> : 引用的是编译器的类库路径里面的头文件,用于引用系统头文件。include "" : 引用的是你程序目录的相对路径中的头文件,如果在程序目录没有找到引用的头文件则到编译器的类库路径的目录下找该头文件,用于引用用户头文件。- 所以:引用系统头文件, 两种形式都会可以,
include<> 效率高,引用用户头文件, 只能使用 include "" 。
|