Jusqu'au jour #pragma once devient la norme (qui n'est actuellement pas une priorité pour l'avenir des normes), je vous suggère de l'utiliser ET de l'utilisation de gardes, de cette façon:
#ifndef BLAH_H
#define BLAH_H
#pragma once
// ...
#endif
Les raisons sont les suivantes :
- #pragma une fois n'est pas standard, donc il est possible que le compilateur ne fournit pas la fonctionnalité. Cela dit, tous les grands compilateur prend en charge. Si un compilateur ne le savent pas, au moins il sera ignoré.
- Comme il n'existe aucune norme de comportement pour le #pragma une fois, vous ne devriez pas supposer que le comportement sera le même sur tous les compilateur. Les gardes s'assurer au moins que le postulat de base est le même pour tous les compilateurs qu'au moins à mettre en œuvre les instructions préprocesseur pour les gardiens.
- Sur la plupart des compilateurs, #pragma once d'accélérer la vitesse de compilation (d'un rpc), car le compilateur ne va pas rouvrir le fichier contenant cette instruction. Afin de l'avoir dans un fichier peut aider, ou pas, selon le compilateur. J'ai entendu g++ pouvez faire la même optimisation lorsque les gardes sont détectées mais il à être confirmée.
En utilisant les deux ensemble, vous obtenez le meilleur de chaque compilateur pour cela.
Maintenant, si vous n'avez pas un script automatique pour générer les gardes, il peut être plus pratique de l'utiliser juste une fois #pragma. Juste savoir ce que cela signifie pour un code portable. (Je suis en utilisant VAssistX pour générer les gardes et pragma fois rapidement)
Vous devriez presque toujours pense que votre code de façon portable (parce que vous ne savez pas de quoi l'avenir est fait), mais si vous pensez vraiment qu'il n'est pas destiné à être compilé avec un autre compilateur (code très spécifique du matériel embarqué par exemple) alors vous devez simplement vérifier que votre compilateur de la documentation à propos de #pragma une fois pour savoir ce que vous êtes vraiment en train de faire.