C++头文件与命名空间的深入浅出【1】
1 . 虽然我学过一段时间的C#,但当我第一次转入到C++的时候,说实话,开始就被头文件给整懵逼了,不过由于C#是在C/C++的基础上衍生的,除了个头文件和一些没见过的点外,后续学起来会相对轻松点。
2 . 所以我接下来要说的是头文件和命名空间……
头文件
1 . 头文件(Header Files)是C或C++等编程语言中,用于声明函数、变量、宏和类型定义的文件,它们通常以.h或.hpp等扩展名结尾。头文件使得程序员能够在多个源文件中使用相同的函数和类型定义,而不必重复编写代码。
2 . C/C++提供了一套标准库,使用的时候需要用预处理指令#include
将其引入,这就被称作头文件,当然,开发者也可以自定义一个函数库,同样使用预处理指令#include
将其引入,它的功能和Python的模块导入代码import
很相似。
3 . 说的直白点,为了高效,头文件可以将已经写好的外部函数库或者标准库引入,这样可以大幅度减少代码的重复编写,提高开发效率和代码的可维护性。头文件的使用允许开发者在程序的不同部分重用已经定义好的代码,例如函数、类、模板等。这种重用机制不仅减少了代码冗余,也使得代码更加模块化,易于管理和扩展。
4 . 头文件的组织结构通常遵循一定的命名规范,以便于开发者快速识别和查找所需的头文件。例如,标准库的头文件通常以<>括起来
,而项目中的自定义头文件则使用""括起来
。
5 . 在C++中,头文件还与命名空间(Namespace)紧密相关。命名空间用于组织代码,避免不同库之间的名称冲突。头文件中通常会包含相应的命名空间声明,以确保使用其中的实体时不会产生命名冲突。
6 . 看下面的经典代码,如果我们想输出“Hello World”,那么我们就需要调用控制台来输出,而count << << endl
方法提供了这样一个功能,但它属于C++一个标准库,所以需要使用#include <iostream>
来引入这个库,最后还需要将该标准库下的命名空间引入,这样编译器才能识别这个输出代码。
1 |
|
7 . 当然,如果不想引用命名空间,可以以命名空间::方法名
在代码中直接调用(除被类
或结构体
封装外)例如:
1 |
|
命名空间
1 . 命名空间在C#已经学到过了,所以很好理解。如果是以C#的方式去理解的话,那它单纯就是将函数库引入到项目代码中。而如果是C/C++,那么就有区别了:
2 . C/C++是使用头文件的预处理指令#include
将函数库引入到项目中,但有些它里函数库里可能也包含了命名空间,当存引入多个函数库时,可能会存在重名的函数,那么就需要使用命名空间将其归类,以免重名冲突。
3 . 这里就不演示了,上面头文件的演示可以再参考一下。
自定义头文件
要想最深入的了解到头文件,可以实践操作一下,自定义一个头文件。
1 . 头文件是允许开发者根据自己的需求自定义的。
2 . 它通常是一个后缀为.h
的文件。
3 . 下面我们来创建一个头文件,在里面写一个加法运算的全局函数,我们将其命名为:Basen
1 | namespace Basen |
4 . 接下来,我们将这个自定义的头文件使用预处理指令将其引入到项目中:#include "test.h"
5 . 最后将命名空间引入:using namespace Basen;
6 . 这样我们就可以直接使用自定义的头文件了。
1 |
|
补充
这里对上稍微做出一些补充
1 . 首先,头文件的,它相当于直接将代码复制到项目中了。
2 . 头文件并没有被直接运行,而是被#include
包含(复制)到源文件中,处于预处理阶段。