Je suis actuellement en train de travailler sur un gros projet et le maintien de tous ceux qui comprennent les gardes me rend fou! De l'écriture à la main est frustrant perte de temps. Bien que de nombreux éditeurs peuvent générer comprenant des protections ce n'aide pas beaucoup:
L'éditeur génère de la garde symbole basé sur un nom de fichier. Le problème se produit lorsque vous avez les en-têtes avec le même nom de fichier dans les répertoires différents. Deux d'entre eux d'obtenir le même inclure de la garde. Y compris la structure de répertoire dans la garde symbole aurait besoin d'un peu de fantaisie approche à partir de l'éditeur, depuis des barres obliques et les barres obliques inverses dans la macro ne sont pas la meilleure chose.
Quand je dois renommer un fichier que je devrais renommer tous les inclure gardes ainsi (dans le ifndef, de définir et idéalement endif du commentaire). Ennuyeux.
Préprocesseur est inondé avec des tonnes de symboles, sans la moindre idée de ce qu'ils signifient.
Néanmoins, la définition est inclus une fois, compilateur encore ouvre-tête à chaque fois qu'il se réunit en-tête de l'inclusion.
Inclure les gardes ne rentre pas dans les espaces de noms, ni de modèles. En fait, ils sont à subvertir les espaces de noms!
Vous avez une chance que votre garde symbole ne sera pas unique.
Peut-être qu'ils ont été solution acceptable dans les moments où les programmes contenaient moins de 1000 en-têtes d'un seul répertoire. Mais de nos jours? Elle est ancienne, elle n'a rien à voir avec moderne des habitudes de codage. Ce qui me dérange le plus, c'est que cette question pourrait être presque compeletly résolu par la directive #pragma une fois. Pourquoi n'est-il pas une norme?