Digamos que hay tres encabezados AAA.h
, BBB.h
y MyLib.h
. MyLib.h
necesita incluir AAA.h
y BBB.h
para funcionar correctamente.¿Hay alguna forma de detectar cuándo se satisfacen "accidentalmente" las dependencias de archivos?
Ahora, simplemente sucede que BBB.h
incluye también AAA.h
en ella, pero esto es estrictamente debido a la implementación, un detalle que MyLib.h
no deberían tener que preocuparse.
Sin embargo, por error, el autor de MyLib.h
omite incluir AAA.h
y nunca lo nota. Normalmente, esto no da como resultado un error o advertencia, hasta donde yo sé. Más tarde, alguien cambia los detalles de implementación de BBB.h
para que AAA.h
ya no sea necesario y, por lo tanto, se elimine. Ahora MyLib no compila porque las partes internas de la biblioteca BBB han cambiado.
¿Hay alguna manera de error o advertencia en casos como estos? Sospecho (si esto es posible) que se necesitaría algún tipo de anotación en el encabezado.
Tiene razón, requeriría una anotación, ya que a veces los encabezados * están documentados * para incluir otros encabezados, o los encabezados se implementan internamente al incluir otros archivos. No querrá pasar por una gran cantidad de falsos positivos porque su código se basa en algo definido en '/ compiler/internals/stl_vector_impl.h', cuando toda su aplicación incluida era' ', o donde las bibliotecas definidas por el usuario han seguido una organización similar. –
GCC tiene una opción para ver qué encabezados incluyen cualesquiera otros: http://stackoverflow.com/questions/5258826/how-to-see-the-actual-order-of-include-files-after-preprocessing/5258938# 5258938 –