Banned.h è una lista di funzioni ANSI C che Microsoft sta cercando di convincere i programmatori a deprecare. So già come applicare l'inclusione automatica di banned.h (come la risposta a Garantire che le intestazioni siano esplicitamente incluse nel file CPP ). Sfortunatamente, questa risposta ha un importante svantaggio.
L'inclusione forzata nelle impostazioni del progetto include sempre l'intestazione forzata prima . Sfortunatamente, la maggior parte dei file di intestazione di sistema di Microsoft non sono banned.h compliant e molte intestazioni di librerie di terze parti non sono nemmeno banned.h compliant. Microsoft afferma che il loro utilizzo delle API bannate è sicuro e non ha intenzione di cambiare questa situazione. Il modo principale per utilizzare le intestazioni di sistema, quindi, è includerle prima di banned.h.
Un modo per risolverlo è creare una sorta di meta_banned.h, che include tutti i possibili header di sistema che sono usati ovunque nel tuo progetto, così come tutte le intestazioni di tutte le librerie di terze parti non conformi, prima di incluso il regolare banned.h. Questa è la prima cosa che ho fatto, ma causa una sfortuna per compilare il tempo perché alcune delle librerie di terze parti hanno intestazioni estese.
Abbiamo finito con un approccio ibrido - il meta_banned.h include le intestazioni di sistema alcuni e quindi le impostazioni del progetto per determinati file CPP eccezionali includono le intestazioni di terze parti come parte della forza- includere le impostazioni su quel particolare file. Funziona, ma è brutto e doloroso da mantenere. Il file per CPP forzato include in particolare sembra brutto.
Quello che voglio veramente è un metodo per garantire che banned.h sia incluso da qualche parte in ogni file, non necessariamente nella parte superiore. Finché è incluso in qualche punto, considero il file compatibile. Se non è incluso, voglio generare un errore di compilazione. Qualche suggerimento?