我一直在研究各种开源项目,他们有一堆用C语言编写的文件,其中.inc
作为文件扩展名。据我所知,它们像头文件一样使用。
我认为标准惯例是对头文件使用.h
文件,对源文件使用.c
。那么,是否有一个关于何时头文件应该是.inc
文件而不是.h
文件的标准约定,或者这些文件仅在每个项目的基础上决定? (或者我只是看着使用.inc
的奇怪项目?)
答案 0 :(得分:3)
标准约定是对仅包含宏定义和其他声明的头文件使用.c
,对包含代码和数据定义的C源文件使用{{1}}。
在某些项目中,代码片段存储在单独的文件中,并包含在C源文件中,并带有一些宏技巧,可以在不同的文件或环境中进行扩展。有时,这些文件甚至在同一源文件中多次包含。要强调附加到此类文件的特殊语义,为它们提供不同的扩展名可能是一个有用的提示。这些文件也可能是作为构建过程的一部分生成的:具体命名它们可以防止与实际源文件混淆。
查看您在这些项目中遇到的文件,并验证此解释是否成立。
答案 1 :(得分:1)
.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) {
// ...
}