Is there any advantage here that I am missing?
Sì, c'è. Io, insieme a un gran numero di progetti software, usavo seguire la pratica descritta nella domanda. Molti progetti, compresi quelli moderni su cui lavoro, ora adottano l'approccio opposto in un file sorgente:
- Il file di intestazione che dichiara le funzioni definite nel file sorgente è il primo che è incluso.
- Altri file di intestazione dello stesso progetto sono inclusi di seguito.
- I file di intestazione di progetti non standard (ad esempio, eigen, boost, Qt) sono inclusi dopo le intestazioni locali.
- Infine, i file di intestazione standard sono inclusi per ultimi.
- Le inclusioni fuori ordine devono essere chiaramente documentate in merito al motivo per cui l'intestazione non è stata inclusa nell'ordine sopra.
Idealmente, tutti i file di intestazione dovrebbero essere autonomi e l'ordine di inclusione non dovrebbe avere importanza. In pratica, le persone spesso scrivono file di intestazione che non sono autonomi, e talvolta l'ordine di inclusione conta. Per combattere il primo problema, il primo file incluso è il file di intestazione che dichiara che le funzioni che si stanno definendo in un file sorgente creano un bel test che un file di intestazione è effettivamente autosufficiente. Errori di compilazione che risultano dal primo file incluso significa che c'è un bug in quell'intestazione.
Per combattere il secondo problema (un'inclusione fuori servizio è necessaria), questo dovrebbe essere visto come un odore di codice. Se l'odore del codice è nel tuo codice progetto, la cosa migliore da fare è correggerlo. Gli odori di codice sono a volte un maleodorante necessario. Supponiamo, ad esempio, di utilizzare quella che altrimenti sarebbe una grande libreria di terze parti se non fosse per il fatto che i suoi file di intestazione non sono autonomi. Si utilizza la libreria perché tutte le alternative sono peggiori, ma si documentano le inclusioni fuori ordine.
Quest'ultimo problema sta diventando più raro in quanto i progetti adottano pratiche di inclusione interne (prima locale, ultimo sistema). Questo ordine di inclusione vecchio stile fa male alla qualità del software.