什么是.h.gch文件?

我最近有一个课程项目,我不得不使用G ++编写程序。 我使用了一个makefile,出于某种原因,偶尔会留下一个.h.gch文件。 有时候,这并不影响编译,但是每隔一段时间就会导致编译器针对已经修复或没有意义的问题发布错误。 我有两个问题:

1)什么是.h.gch文件,用于什么? 和

2)为什么在没有清理的时候会造成这样的问题?

谢谢您的帮助。

.gch文件是一个预编译的头文件。

如果没有find.gch则会使用正常的头文件。

但是,如果您的项目设置为生成预编译头文件,则会在不存在的情况下生成它们,并在下一个版本中使用它们。

有时*.h.gch将被损坏或包含过时的信息,所以删除该文件并重新编译应该修复它。

如果你想知道一个文件,只需键入terminal

 file filename 

file ahgch给出:

 GCC precompiled header (version 013) for C 

它是一个GCC预编译头。

维基百科有一个体面的解释, http://en.wikipedia.org/wiki/Precompiled_header

a)它们是预编译的头文件: http : //gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

b)它们包含来自.h文件的“caching”信息,并应在每次更改相应的.h文件时更新。 如果没有发生 – 您的项目中设置了错误的依赖关系

其他答案是完全准确的什么gch文件。 然而,上下文(在这种情况下,使用g ++的初学者)就是一切。 在这方面,有两条规则:

  1. 永远不要把.h文件放在g ++编译行上。 只有.cpp文件。 如果一个.h文件被偶然编译,删除任何* .gch文件

  2. 永远不要将.cpp文件放在#include语句中。

如果规则一被打破,在某个时候问题中描述的问题就会发生。 如果第二条规则被破坏,链接器会在某个时候抱怨多重定义的符号。