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 mis propias cabeceras de «herramientas», como require.h, luego cabeceras de librerías de terceros, después cabeceras de la Librería Estándar de C++, y finalmente cabeceras de la librería de C.

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

Los errores de uso latentes se pueden evitar asegurando que el fichero .h de un componente se pueda analizar por sí mismo - sin declaraciones o definiciones proporcionadas externamente... Incluir el fichero .h como primerísima línea del fichero .c asegura que no falta en el fichero .h ninguna pieza de información crítica intrínseca a la interfaz física del componente (o, si falta, que lo descubrirá en cuanto intente compilar el fichero .c).

Si el orden de inclusión va «desde el más específico al más general», entonces es más probable que, si su fichero de cabecera no se puede analizar por sí mismo, lo descubra antes y evite disgustos en el futuro.