He leído todo lo que pude encontrar sobre este tema, incluyendo un par de discusiones muy útiles en este sitio, las pautas de codificación de la NASA y las pautas de Google C++. Incluso compré el libro "Diseño físico en C++" recomendado aquí (lo siento, olvidé el nombre) y obtuve algunas ideas útiles de eso. La mayoría de las fuentes parecen estar de acuerdo: los archivos de encabezado deben ser independientes, es decir, incluyen lo que necesitan para que un archivo cpp pueda incluir el encabezado sin incluir otros y se compilaría. También entiendo el punto acerca de la declaración progresiva en lugar de incluir siempre que sea posible.Política de encabezado C++ en proyectos grandes (redux)
Dicho esto, ¿qué tal si foo.cpp
incluye bar.h
y qux.h
, pero resulta que sí incluye bar.h
qux.h
? ¿Debería foo.cpp
luego evitar incluir qux.h
? Pro: limpia foo.cpp
(menos "ruido"). Con: si alguien cambia bar.h para dejar de incluir qux.h
, foo.cpp
misteriosamente comienza a fallar en la compilación. También hace que la dependencia entre foo.cpp
y qux.h
no sea obvia.
Si su respuesta es "un archivo cpp debe #incluir cada encabezado que necesita", llevado a su conclusión lógica que significa que casi todos los archivos cpp tienen #include <string>, <cstddef>
etc. ya que la mayoría del código terminará usándolos, y Si no se supone que dependas de otro encabezado que los incluya, tu cpp debe incluirlos explícitamente. Parece mucho "ruido" en los archivos cpp.
¿Pensamientos?
discusiones anteriores:
What are some techniques for limiting compilation dependencies in C++ projects?
Your preferred C/C++ header policy for big projects?
How do I automate finding unused #include directives?
ETA: Inspirado en las discusiones anteriores de aquí, he escrito un script Perl para comentar sucesivamente a cabo cada 'incluye' y 'usar', luego intente recompilar el archivo fuente, para descubrir lo que no se necesita. También descubrí cómo integrarlo con VS 2005, por lo que puede hacer doble clic para ir a "no utilizado". Si alguien lo quiere, hágamelo saber ... muy experimental en este momento sin embargo.
Mi conjetura es que esto debería ser wiki de la comunidad, ya que es posiblemente subjetivo. – GManNickG
Si recuerda cuál es el verdadero nombre del libro "Diseño físico en C++", edite la pregunta. Me gustaría verificarlo (si no lo he hecho todavía). –
El libro podría ser "Diseño de software de C++ a gran escala" de John Lakos: http://www.amazon.com/Large-Scale-Software-Addison-Wesley-Professional-Computing/dp/0201633620 –