2016-02-06 5 views
-4

Veuillez m'aider J'ai plusieurs questions: que sont les en-têtes précompilés? quel est leur usage? comment en faire un? et comment en inclure un?Définition des en-têtes précompilés C++

+0

Jamais entendu le terme «bibliothèques précompilées» avant. Envisagez-vous des [en-têtes précompilés] (https://en.wikipedia.org/wiki/Precompiled_header), peut-être? –

+0

@IgorTandetnik oui je le pense –

+0

Combien d'en-têtes? Est-ce que les en-têtes changent fréquemment? BTW, les en-têtes précompilés sont une spécialité du compilateur et ne font pas partie de la langue standard. Quel compilateur utilisez-vous? –

Répondre

1

Les en-têtes précompilés (en abrégé PCH) sont pris en charge par certains compilateurs. Le support et ce qu'ils contiennent [en dehors de "quelque chose qui, espérons-le, peut être lu plus vite que le fichier d'en-tête original"] est à la discrétion de chaque producteur de compilateur. J'ai un peu de compréhension de la façon dont Clang fait ses en-têtes précompilés, et c'est essentiellement une forme binaire du code C ou C++ "analysé" dans l'en-tête - donc il produit un seul fichier qui n'a pas besoin d'être analysé. niveau comme le fichier d'en-tête lui-même].

Le but est de réduire le temps de compilation. Cependant, d'après mon expérience, la partie LONG de la compilation est généralement la génération de code avec optimisation. Toutefois, dans certains cas, en particulier lorsque beaucoup de fichiers d'en-tête sont impliqués, le temps de lire et d'analyser les fichiers d'en-tête peut être une partie notable de la durée de compilation globale. En règle générale, la façon dont ils sont utilisés est que vous dites au compilateur que vous voulez un en-tête précompilé, et pour chaque compilation, le compilateur va générer l'en-tête précompilé s'il n'y est pas déjà, et le lire quand il est présent. 1] - ceci est généralement fait pour un fichier d'en-tête nommé, qui inclut beaucoup d'autres choses. Microsoft Visual Studio a généralement un fichier appelé "stdafx.h" qui est précompilé - et au moins dans le cas des produits MS, il doit s'agir du premier fichier inclus dans un projet [ceci afin qu'aucun autre fichier d'en-tête ne modifie le sens par exemple de quelque macro - je m'attends à ce qu'il y ait un hachage des définitions compilateur/ligne de commande des macros, donc si l'un de ces changements, le PCH est recompilé]. L'idée est de ne pas inclure chaque fichier d'en-tête dans ce fichier précompilé, mais les fichiers d'en-tête qui sont utilisés dans les fichiers MOST, et qui ne changent pas souvent (le PCH doit être régénéré si les fichiers est précompilé a changé, donc ça ne sert à rien de le faire si vous continuez à changer les fichiers d'en-tête fréquemment). Bien sûr, comme toute autre dépendance de construction, tout ce qui utilise l'en-tête précompilé devra être reconstruit si le PCH a changé.

Pour savoir exactement comment utiliser cela, vous devrez lire la documentation du compilateur que vous utilisez.

[1] Si rien n'a changé, cela nécessite d'être reconstruit.