C/C++ 自定义头文件,及头文件结构详解

简介: 还是从"stdio.h"说起,这是C语言中内置的标准库,也就是说,头文件很多时候其实就是一个“库”,类似于代码的仓库,也就是说将某些具有特定功能的常量、宏、函数等归为一个大类,然后放进这个“仓库”,就像stdio.h就是一个标准输入/输出的头文件

头文件

在之前介绍的大部分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语言 自定义头文件,及头文件结构详解

免责声明:内容仅供参考,不保证正确性!

相关文章
|
4月前
|
C++
C++ PCL 沿着自定义的平面做横截面(直通滤波)
C++ PCL 沿着自定义的平面做横截面(直通滤波)
47 0
|
1月前
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
|
3月前
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
61 2
|
4月前
|
C++ 容器
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
36 5
|
4月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
56 0
|
4月前
|
C++
c++学习笔记03 程序流程结构
C++学习笔记,主要介绍了程序流程结构,包括顺序结构、选择结构和循环结构。选择结构中详细解释了if语句、三目运算符和switch语句的用法和注意事项。循环结构部分则涵盖了while循环、do-while循环和for循环的语法和使用技巧。此外,还介绍了跳转语句,包括break、continue和goto语句的用途和用法。
38 0
|
4月前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
42 0
|
4月前
|
关系型数据库 C++ 容器
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树
38 0
|
6月前
|
存储 测试技术 C++
C++中的结构
C++中的结构
25 2
|
6月前
|
算法 C++
C++中的结构应用:Josephus问题
C++中的结构应用:Josephus问题
49 1