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

Difference between .h files and .inc files in c

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

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

标准约定是对仅包含宏定义和其他声明的头文件使用 .h,对包含代码和数据定义的 C 源文件使用 .c

在某些项目中,代码片段存储在单独的文件中,并包含在C 源文件中,并通过一些宏技巧在不同的文件或环境中进行专门扩展。有时,这些文件甚至多次包含在同一个源文件中。为了强调附加到这些文件的 special 语义,给它们一个不同的扩展名可能是一个有用的提示。这些文件也可能是作为构建过程的一部分生成的:专门命名它们可以防止与实际源文件混淆。

查看您在这些项目中遇到的文件并验证此解释是否成立。

.inc 文件通常与模板化的 classes 和函数相关联。

标准 classes 和函数使用 .h 文件声明,然后使用 .cpp 文件定义。但是,模板既不是 class 也不是函数,而是一种用于生成 class 类或函数族的模式。为了让编译器生成模板的代码,它需要同时查看声明和定义,因此它们都必须包含在 .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) {
    // ...
}