File Top.h
#include <string>
...some code...
File Bottom.h:
#include "Top.h"
void someFunction() {
string s = new String();
...
}
Il Bottom.h non contiene un inclusivo per l'intestazione della stringa, ma il codice funzionerà perché è implicitamente incluso da Top.h
Ora, se Top.h cambia per qualsiasi motivo per non includere più string, Bottom.h si interromperà.
So che è buona norma avere i file .h "include independent", il che significa che ognuno di essi include esplicitamente tutte le intestazioni che usa. Tuttavia, il mantenimento di tale pratica è un compito mentale aggiuntivo che devo fare, che è soggetto a errori poiché lo sto facendo manualmente.
C'è un modo per far controllare l'IDE o il compilatore? Esistono analizzatori di codici statici che avvertono l'utente che stanno utilizzando un componente che non è esplicitamente incluso nel file in cui è utilizzato? C'è un flag del compilatore che verifica questo? Mi sono occupato di questo problema e non sono riuscito a trovare nulla di simile, ma non sembra difficile da implementare e sembra qualcosa che possa garantire la stabilità del codice. Detto questo, c'è una ragione per cui quello che sto suggerendo sarebbe una cattiva idea o non funziona in alcuni casi? Se sì, quale?
Ha senso?
EDIT dopo aver letto alcune risposte:
Potrebbe essere possibile rendere linker / compilatore semi-processare ogni file semi-separatamente?
Prenderebbe ogni file e guarderà tutte le intestazioni che include. Quindi passa attraverso quei file, ma non li compila, guarda solo quali simboli sono definiti lì, escludendo le proprie intestazioni . Quindi passa attraverso il file che abbiamo iniziato e vediamo se utilizza i simboli che non ha incontrato nel passaggio precedente. Se lo fa, significa che il simbolo non è affatto incluso o è stato incluso implicitamente attraverso l'intestazione di uno degli include.
Non risolverebbe il problema, o ci sono alcune caratteristiche del C ++ che non funzionerebbero con questo?