====Règles de qualité de code====
Merci à [[https://upcoder.com/20/cc-include-guidelines|C/C++ Include Guidelines]] {{ :lang:cpp:include:upcoder_coding_blog_2020-01-04_12_30_35_.html |Archive le 13/10/2019 du 04/01/2020}} qui a le même avis sur la question que moi.
===Ne pas oublier d'includes===
Les fichiers entêtes doivent se compiler.
gcc header.hpp -fsyntax-only
===Ne pas exposer l'implémentation===
Pour les classes publiques, et si besoin pour les classes privées, masquer l'implémentation via [[helloworld:design_pattern:pont:cpp|pimpl]].
===Éviter les inclusions multiples===
Utiliser
#pragma once
et non pas les
#ifndef XXX_H__
#define XXX_H__
...
#endif
===Ordre d'inclusion===
D'abord les inclusions systèmes ''#include <....hpp>'', puis les inclusions locales (''#include %%"%%....h%%"%%'').
===Un entête, une classe===
Un seul fichier entête pour une ''class'', un ''enum'', une ''struct''.
Cela réduit les dépendances.
===Inclure les sous-dossiers dans les includes===
Dans une même librairie, préférer l'inclusion du sous dossier depuis la racine du projet plutôt que devoir fournir une liste complète des dossiers à chercher (''-I'' dans gcc).
Bon code :
#include "Network/CreateSession.h"
#include "Application/Settings.h"
#include "ExternalLib/RakNet/RakPeerInterface.h"
Mauvais code :
#include "CreateSession.h"
#include "Settings.h"
#include "RakPeerInterface.h"