Verificando o arquivo de header para dependencies em tempo de compilation

Os compiladores oferecem a capacidade de verificar automaticamente se cada arquivo de origem (e seu arquivo de header associado, se houver algum) inclui todos os outros headers necessários? Ou, pelo menos, emitir um aviso, digamos, se um header obrigatório não for incluído explicitamente?

Por exemplo, eu gostaria que o compilador reportasse quando fizesse algo assim:

header1.h

#include  ... 

header2.h

 #include "header1.h" #include  std::string blah; //<-- issue warning here,  not included explicitly ... 

source2.cpp

 #include "header2.h" ... cout << endl; //<-- issue warning here,  not included explicitly 

Eu estou usando g + + e Visual Studio, então minha pergunta se aplica principalmente a esses compiladores. Obrigado!

Não há maneira automática de fazê-lo, tanto quanto eu sei.

Minha sugestão é confinar inclusões em headers apenas ao que é necessário para a “interface” definida no .h Em C ++ Coding Standards (Sutter, Alexandrescu) você pode encontrar um item que aborda isso explicitamente (é intitulado Fazer arquivos de header auto-suficientes ). Eu cito:

Comporte-se com responsabilidade: certifique-se de que cada header que você escreve seja compilável como autônomo, incluindo os headers dos quais seu conteúdo depende

e

Mas não inclua headers que você não precisa; eles apenas criam dependencies perdidas. Considere esta técnica para ajudar a reforçar a auto-suficiência do header: Em sua compilation, compile cada header isoladamente e verifique se não há erros ou avisos.

Além disso, você deve sempre include o seu próprio .h primeiro, pois isso maximiza a probabilidade de descobrir se há erros de inclusão.

Em todos os casos, os headers devem ser trocados, de modo que, se o arquivo include ah e bh, ambos os pedidos possíveis devem ser feitos.