头文件是实际的文件 - 存储在文件系统中,通过文件名引用,并在其他文件中使用#include
包含(至少在C/C++或使用M4宏预处理器的其他语言中如此)。头文件通常将所有相互依赖的代码片段组合在一起,形成同一特定项的部分。例如,一个游戏可能为其所有图形渲染设置了一个头文件。
而命名空间则是编程语言的一个元素 - 它们不存在于文件系统对象中,而是作为代码中的指定,告诉编译器某些东西在该命名空间内。命名空间通常将相似(但不一定相互依赖)项的接口(函数、类/结构体、类型)分组。例如,在C++中,std
命名空间包含所有标准库函数和类。
要知道什么是头文件,你需要了解“声明”的含义。
简单来说,在C/C++中,编译是按每个源文件进行的。假设我有一个A.cpp文件,在里面使用了一个函数foo(),该函数将在其他地方定义,我需要告诉编译器:“嘿,我正在使用foo(),虽然你看不到它在我的源代码中定义,但不用担心,它在另一个源文件中定义”。通过在A.cpp中“声明”foo()的方法来告诉编译器。
如果我是foo()函数的作者,那么每个使用foo()的人都需要在他们的源文件中写入声明 void foo();这将产生大量重复且无意义的工作。而且很难让使用foo()的人正确地声明它。因此,作为foo()函数的作者,我会编写一个包含使用foo()声明的文件,并分发它以便人们可以将文件内容“导入”到他们的源代码中。我所分发的文件就是头文件。在C/C++中,导入文件的操作是 #include 。是的,#include仅是将所包含文件的内容插入到#include处的位置。
命名空间是另一回事。简单地说,你可以把它看作是函数/类等的“真正”名称。例如,如果我编写
namespace FOO {
class Bar { }
}
这个类的真正名称并不是Bar,它的实际名称实际上是FOO :: Bar。
C++ 提供了一些方式通过“使用”省略冗长的真实名称。
std
命名空间中。命名空间是“ansi c++”中的一个新概念,用于标识在程序中经常使用的全局标识符。
头文件是支持您的程序的源文件,通过重用可靠和经过测试的代码来节省时间和精力!!!
命名空间是给头文件取的新词,为了让新版本可用。