c中的.h文件和.inc文件之间的区别

时间:2016-07-15 18:02:06

标签: c include header-files

我一直在研究各种开源项目,他们有一堆用C语言编写的文件,其中.inc作为文件扩展名。据我所知,它们像头文件一样使用。

我认为标准惯例是对头文件使用.h文件,对源文件使用.c。那么,是否有一个关于何时头文件应该是.inc文件而不是.h文件的标准约定,或者这些文件仅在每个项目的基础上决定? (或者我只是看着使用.inc的奇怪项目?)

2 个答案:

答案 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) {
    // ...
}