Question

En regardant une base de code open source, je suis tombé sur ce code:

#include "StableHeaders.h"
#include "polygon.h"
#include "exception.h"
#include "vector.h"
...

Maintenant, StableHeaders.h est un en-tête précompilé qui est inclus dans un cpp "control" pour forcer sa génération. Les trois inclus qui apparaissent après l'en-tête précompilé sont également inclus dans le fichier StableHeaders.h. Ma question est la suivante: ces fichiers sont-ils inclus deux fois pour que la base de code repose sur des compilateurs qui ne prennent pas en charge les en-têtes précompilés? En supposant que l’inclusion de gardes / en-tête rende le multiple inclus de toute façon redondant ...

EDIT Par ailleurs, le fichier stableheaders.h contient une vérification de win32 (à peu près), ce qui revient à supposer que les inclus dans inside stableheaders.h ne seront pas inclus dans les compilateurs qui ne prennent pas en charge les en-têtes précompilés.

Était-ce utile?

La solution

Les compilateurs qui ne prennent pas en charge les en-têtes précompilés incluraient simplement StableHeaders.h et l’analyseraient à chaque fois (au lieu d’utiliser le fichier précompilé). Cela ne causera pas de problèmes et ne résoudra aucun problème pour certains compilateurs, comme vous l'avez demandé. Je pense que c'est juste une "erreur" mineure qui s'est probablement produite avec le temps au cours du développement.

Autres conseils

Je pense que vous avez vous-même répondu à la question! Les en-têtes pré-compilés sont une fonctionnalité du compilateur. Si la garde est présente, les en-têtes ne seront pas inclus deux fois, dans tous les cas.

La rapidité est la seule raison pour laquelle je peux penser à protéger l'en-tête précompilé et à l'inclure. La raison d'utiliser les en-têtes précompilés est d'accélérer les temps de compilation. Cela fonctionne en incluant et en compilant le contenu de l'en-tête précompilé. Lorsque vous faites cela, vous pouvez inclure des en-têtes qui ne sont utilisés que par 75% des fichiers source et il reste en attente. plus rapide que les en-têtes précompilés.

Toutefois, si les autres plates-formes prennent en charge les en-têtes pré-compilés, vous ne souhaitez inclure que les fichiers d’en-tête requis pour ce fichier source. Par conséquent, si l'en-tête précompilé contient des fichiers d'inclusion qui ne sont requis que par certains fichiers source, il est plus rapide d'inclure et de compiler les fichiers d'en-tête dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top