A.6. Orden de los #includes

Los ficheros de cabecera se incluyen en orden «del más específico al más general». Es decir, cualquier fichero de cabecera en el directorio local se incluye primero, después las «herramientas» propias, como require.h, luego cabeceras de librerías de terceros, después cabeceras de la librería estándar C++, y finalmente cabeceras de la librería C.

La justificación para esto viene de John Lakos en Large-Scale C++ Software Design (Addison-Wesley, 1996):

FIXME Los errores de uso latentes se puede evitar asegurando que el fichero .h de un componente es coherente en si mismo - sin declaraciones o definiciones externas. Incluir el fichero .h como primera línea del fichero .c asegura que no falta ninguna pieza de información de la interfaz física del componente en el fichero .h (o, si la hay, aparecerá en cuanto intente compilar el fichero .c.

Si el orden de inclusión fuese «desde el más específico al más general», entonces es más probable que si su fichero de cabecera no es coherente por si mismo, lo descubrirá antes y prevendrá disgustos en el futuro.