也可以包含头文件，这给了编译器一个检查声明和定义一致性的机会。通常，头文件被用来唯一指定接口，且多少提供一些文档来说明如何使用在该文件中声明的组件。在这个例子中，子程序的实现放在一个单独的源文件中，这个源文件被单独编译。（在C和C++中有个例外，即内联函数。内联函数通常放在头文件中，因为大多数实现如果不知道其定义，在编译时便无法适当的展开内联函数。）
替代.在访问声明在不同文件中的标识符问题上，头文件不是唯一的解决方法。他们也有缺点，当定义改变的时候可能仍然需要在两个地方来修改