网站首页 > 文章精选 正文
头文件
在之前介绍的大部分C语言语法基础的章节中列举的实例代码部分,都会在源文件的开始的第一行通过#include预处理指令包含进"stdio.h",后面这个".h"后缀名的就是头文件了。而什么是头文件呢?
通俗方式理解头文件
还是从"stdio.h"说起,这是C语言中内置的标准库,也就是说,头文件很多时候其实就是一个“库”,类似于代码的仓库,也就是说将某些具有特定功能的常量、宏、函数等归为一个大类,然后放进这个“仓库”,就像stdio.h就是一个标准输入/输出的头文件。
头文件的作用
将某些具有特定功能的常量、宏、函数等归为一类,封装成头文件有什么作用呢?可以参考如下:
- 首先,头文件可以通过#include预处理的方式包含进源文件,可以在预处理阶段展开进行预处理,比如使用#ifndef等预处理指令判断头文件中的内容是否已经被定义(可能会多次展开同一个头文件),如果是的话,那么在编译的阶段就不会对相同的内容重复编译,如此便可提高编译的性能效率;
- 其次,将具有特定功能的程序归为一类封装在同一个头文件中,可以形成模块化编程,也能很大地提高代码的共享性和复用性,以及维护管理的便捷性,进而提高编程开发和项目维护的效率;
- 写稿的时候,暂时想到这么多,如果以后有什么新的想法了会在留言处补充;
自定义头文件
自定义头文件,是的,相当于自己“造轮子”,在实际的项目开发中比较有可能会用到,这对于提高开发效率很有帮助。下面就介绍一下自定义头文件的步骤:
- 第一,在C源文件的同一目录下(现阶段暂且就放在同一目录下吧),创建一个".h"后缀名的文件,文件名自定义,比如test.h;
- 第二,添加条件编译的预处理指令:一般为#ifndef、#define和#endif,用于防止重复编译;
- 第三,在#define和#endif之间,添加需要的声明和定义;
头文件的结构可参考如下:
#infdef TEST_H
#define TEST_H
//添加需要的声明和定义
#endif
头文件结构分析
- TEST_H:其实就是test.h头文件的名称转变而成的,这是一个标识符,应当具有唯一性,即与其它的头文件不一样,用于避免重复编译;
- #define TEST_H后面为什么没有向其它的宏定义一样紧跟着宏的“替换文本”呢?这种状态下的宏的主要作用在于进行头文件的标记,标记该头文件中的声明和定义已经被编译了,不需要重复编译(第一次编译完TEST_H之后,下一次如果还有源文件include该头文件,那么ifndef TEST_H就不会返回真——第一次为#define TEST_H则返回真)。
自定义头文件实例代码
如下实例代码,简单地创建了一个头文件,并定义了一个简单的函数(实际开发中一般不在头文件中定义函数,具体原因将在之后的章节中介绍),然后在源文件中包含该头文件,并使用该函数:
// test.h
#ifndef TEST_H
#define TEST_H
void test(){
printf("Hello,World");//实际开发中一般不在头文件中定义函数
}
#endif
//test.c
#include "stdio.h"
#include "test.h"
int main() {
test();
return 0;
}
代码编译运行,得到输出:
Hello,World
原文(及后续章节):C语言 自定义头文件,及头文件结构详解
免责声明:内容仅供参考,不保证正确性!
猜你喜欢
- 2025-07-06 C语言精华:宏与预处理器技巧深度解析
- 2025-07-06 一文读懂C程序的编译过程(c 程序如何编译)
- 2025-07-06 C#项目中引用不同版本的DLL(c# 引用c++的dll .h)
- 2025-07-06 20个最经典的C语言问答题,建议关注加收藏
- 2025-07-06 这些C++工程师面试题你都会了吗?(c/c++工程师面试会怎么问)
- 2025-07-06 C语言翻译环境:预编译+编译+汇编+链接详解
- 2025-07-06 VBA实现Excel无边框登录界面以及安全验证与用户交互设计
- 2025-07-06 C++基础知识总结(超详细总结)(c++ 基础知识)
- 2025-07-06 C++开发:源码编译过程(c++11源码)
- 2025-07-06 01程序编译过程分析,预处理,编译,汇编,链接
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)