Je vois que dans de nombreux projets et exemples que les inclut locales sont énumérées avant que les Libs externes et avant les fichiers d'en-tête destinés à la fonctionnalité de compilateur intégrée.
Y a-t-il un avantage ici que je manque?
J'ai toujours utilisé le modèle suivant:
1) built in header files
2) External lib header file
A) External lib dependent on previous lib header file
3) custom project libs
4) local project header files
Par exemple:
#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include "DisplayInfo.h"
#include "projectModule.h"
Est-ce mal ou mauvaise pratique?
Y a-t-il un avantage ici que je manque?
Oui il y a. Je, avec un grand nombre de projets logiciels, utilisées pour suivre la pratique décrite dans la question. De nombreux projets, y compris ceux modernes que je travaille, prennent désormais l'approche opposée dans un fichier source:
[.____] Idéalement, tous les fichiers d'en-tête doivent être autonomes et l'ordre d'inclusion ne devrait pas avoir d'importance. En pratique, les gens écrivent souvent des fichiers d'en-tête qui ne sont pas autonomes et parfois de l'ordre d'inclusion importe. Pour lutter contre le premier problème, le premier fichier inclus est le fichier d'en-tête qui déclare que les fonctions définies dans un fichier source crée un bon test qu'un fichier d'en-tête est bien autonome. Les erreurs de compilation résultant de ce tout premier fichier inclus signifie qu'il y a un bogue dans cet en-tête.
Pour lutter contre le deuxième problème (une inclusion hors commandement est nécessaire), cela devrait être considéré comme une odeur de code. Si l'odeur de code est dans votre propre code de projet, la meilleure chose à faire est de le réparer. Les odeurs de code sont occasionnellement un puanteur nécessaire. Supposons, par exemple, vous utilisez ce qui serait autrement une grande bibliothèque tiers n'étant pas pour le fait que ses fichiers d'en-tête ne sont pas autonomes. Vous utilisez la bibliothèque car toutes les alternatives sont pires, mais vous documentez les inclusions hors de l'ordre.
Ce dernier problème est de plus en plus rare car les projets adoptent des pratiques d'inclusion intérieures (premières locales, dernier). Cet ordre d'inclusion de style ancien fait mal la qualité du logiciel.
Non, votre commande de l'inclut n'est pas une mauvaise pratique.
Un avantage de la mise en place du fichier d'en-tête local en premier, en particulier le fichier qui déclare les fonctions dont la définition est dans le fichier actuel, vous pouvez vous assurer que vos fichiers d'en-tête sont autonomes (ils ne dépendent pas des autres fichiers d'en-tête étant inclus devant eux).
Outre cela, l'ordre d'inclure est principalement une question de goût personnalisé local et personnalisé.