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) {
// ...
}
我一直在关注各种开源项目,他们有一堆用 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) {
// ...
}