Donc, j'ai récemment eu une discussion où je travaille, où je doute de l'utilisation d'un double inclure la garde dans un seul garde. Ce que je veux dire par double garde est comme suit:
Fichier d'en-tête, "header_a.hpp":
#ifndef __HEADER_A_HPP__
#define __HEADER_A_HPP__
...
...
#endif
Lors de l'inclusion du fichier d'en-tête de n'importe où, que ce soit dans un en-tête ou le fichier source:
#ifndef __HEADER_A_HPP__
#include "header_a.hpp"
#endif
Maintenant, je comprends que l'utilisation de la garde dans les fichiers d'en-tête est pour éviter que plusieurs inclusion d'un déjà défini fichier d'en-tête, il est courant et bien documenté. Si la macro est déjà défini, l'ensemble de l'en-tête de fichier est vu comme "blanc" par le compilateur et la double inclusion est empêché. Assez Simple.
La question que je ne comprends pas, c'est à l'aide de #ifndef __HEADER_A_HPP__
et #endif
autour de la #include "header_a.hpp"
. Je suis informé par le collègue de travail que cela ajoute une seconde couche de protection pour les inclusions, mais je ne vois pas comment cette seconde couche est même utile si la première couche ne fait absolument le travail (ou si?).
Le seul avantage que je peux venir avec, c'est qu'il s'arrête carrément l'éditeur de liens de déranger pour trouver le fichier. Est-ce censé améliorer le temps de compilation (qui n'a pas été mentionné comme un avantage), ou est-il autre chose ici que je ne suis pas le voir?