Qu’est ce qu’un fichier .h.gch?

J’ai récemment eu un projet de classe où je devais créer un programme avec G ++. J’ai utilisé un fichier makefile et pour une raison quelconque, il laissait occasionnellement un fichier .h.gch. Parfois, cela n’affectait pas la compilation, mais parfois, le compilateur émettait une erreur pour un problème qui avait été résolu ou qui n’avait pas de sens. J’ai deux questions:

1) Qu’est-ce qu’un fichier .h.gch et à quoi sert-il? et

2) Pourquoi cela causerait-il de tels problèmes quand il n’a pas été nettoyé?

Merci pour l’aide.

Un fichier .gch est un en-tête précompilé.

Si un .gch n’est pas trouvé, les fichiers d’en-tête normaux seront utilisés.

Cependant, si votre projet est configuré pour générer des en-têtes pré-compilés, il les générera s’ils n’existent pas et les utilisera dans la prochaine génération.

Parfois, le *.h.gch sera corrompu ou contiendra des informations obsolètes. Par conséquent, si vous supprimez ce fichier et le comstackz à nouveau, vous devez le corriger.

Si vous voulez connaître un fichier, tapez simplement sur le terminal

 file filename 

file ahgch donne:

 GCC precomstackd header (version 013) for C 

C’est un en-tête précompilé par GCC.

Wikipedia a une explication à moitié décente, http://en.wikipedia.org/wiki/Precomstackd_header

a) Ce sont des en-têtes précompilés: http://gcc.gnu.org/onlinedocs/gcc/Precomstackd-Headers.html

b) Ils contiennent des informations “en cache” des fichiers .h et doivent être mis à jour chaque fois que vous modifiez le fichier .h correspondant. Si cela ne se produit pas – vous avez de mauvaises dépendances définies dans votre projet

D’autres réponses sont tout à fait exactes en ce qui concerne ce qu’est un fichier gch. Cependant, le contexte (dans ce cas, un débutant utilisant g ++) est tout. Dans ce contexte, il y a deux règles:

  1. Jamais, jamais, mettre un fichier .h sur une ligne de compilation g ++. Seuls les fichiers .cpp. Si un fichier .h est jamais compilé accidentellement, supprimez tous les fichiers * .gch

  2. Jamais, jamais, mettre un fichier .cpp dans une déclaration #include.

Si la règle 1 est cassée, le problème décrit dans la question se produira à un moment donné. Si la règle deux est cassée, l’éditeur de liens se plaindra à un moment donné des symboles à plusieurs définitions.