web-dev-qa-db-fra.com

Qu'est-ce qu'un fichier .h.gch?

J'ai récemment eu un projet de classe où je devais faire un programme avec G ++. J'ai utilisé un fichier makefile et, pour une raison quelconque, il laissait parfois un fichier .h.gch derrière. Parfois, cela n’affectait pas la compilation, mais il arrivait que le compilateur génère une erreur pour un problème qui avait été corrigé ou qui n’avait aucun 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.

105
mnuzzo

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

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

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

Parfois le *.h.gch sera corrompu ou contiendra des informations obsolètes. Il est donc préférable de supprimer ce fichier et de le recompiler.

104
Dunewalker

Si vous voulez en savoir plus sur un fichier, tapez simplement sur le terminal

file filename

file a.h.gch donne:

GCC precompiled header (version 013) for C
33
riteshkasat

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

Wikipedia a une explication à peu près décente, http://en.wikipedia.org/wiki/Precompiled_header

20
Goz

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

b) Ils contiennent des informations "mises en cache" provenant de fichiers .h et doivent être mis à jour chaque fois que vous modifiez le fichier .h correspondant. Si cela ne se produit pas, des dépendances erronées sont définies dans votre projet.

15

Les autres réponses sont tout à fait exactes en ce qui concerne le 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, jamais mis un fichier .h sur une ligne de compilation g ++. Seuls les fichiers .cpp. Si un fichier .h est déjà compilé accidentellement, supprimez tous les fichiers * .gch.

  2. Jamais, jamais, jamais mis un fichier .cpp dans une instruction #include.

Si la règle 1 est enfreinte, le problème décrit dans la question se produira à un moment donné. Si la règle deux est enfreinte, l'éditeur de liens se plaindra à un moment donné de symboles à définitions multiples.

11
tgibson