我一直在研究各种开源项目,发现有许多C语言文件的文件扩展名为.inc
。根据我的观察,它们似乎像头文件一样被使用。
我认为标准惯例是使用.h
文件作为头文件,而将.c
用于源文件。那么,何时应将头文件命名为.inc
文件而不是.h
文件?还是这只是在每个项目基础上决定的呢?(或者我只是在看使用.inc
的奇怪项目?)
我一直在研究各种开源项目,发现有许多C语言文件的文件扩展名为.inc
。根据我的观察,它们似乎像头文件一样被使用。
我认为标准惯例是使用.h
文件作为头文件,而将.c
用于源文件。那么,何时应将头文件命名为.inc
文件而不是.h
文件?还是这只是在每个项目基础上决定的呢?(或者我只是在看使用.inc
的奇怪项目?)
.h
作为仅包含宏定义和其他声明的头文件的扩展名,而将包含代码和数据定义的C源文件的扩展名设置为.c
。.inc
文件通常与模板类和函数相关联。
标准类和函数是通过.h
文件声明并通过.cpp
文件定义的。但是,模板既不是类也不是函数,而是用于生成一组类或函数的模式。为了让编译器生成模板的代码,它需要看到声明和定义,因此两者都必须包含在.h
文件中。
为了保持声明和定义的分离,将定义放在自己的文件中,并在.h
文件的末尾进行包含。这个文件可能有多个可能的文件扩展名,如.inc
、.imp
、.impl
、.tpp
等。
声明示例:
// Foo.h
#ifndef FOO_H
#define FOO_H
template<typename T>
class Foo {
public:
Foo();
void DoSomething(T x);
private:
T x;
};
#include "Foo.inc"
#endif // FOO_H
定义示例:
// Foo.inc
#include "Foo.h"
template<typename T>
Foo<T>::Foo() {
// ...
}
template<typename T>
void Foo<T>::DoSomething(T x) {
// ...
}
.h
扩展名,或者实现文件必须使用.c
扩展名(尽管大多数编译器和IDE都希望你遵循这个惯例)。话虽如此,在我的经验中,使用.inc
作为头文件扩展名是不寻常的。 - John Bode.inc
文件不是头文件。它可以用来包含一个大的已定义数组,只是为了将其放在源文件编辑之外。 - Weather Vane.inc
文件可能是生成的而不是手动输入的。在这种情况下,生成程序只需要编写最小化的开销使其可用作源代码。然后程序员就不必在每次调整数据时进行复制/粘贴。 - Weather Vane