Headers
are included from “the most specific to the most general.” That is,
any header files in the local directory are included first, then any of my own
“tool” headers such as
require.h
or
purge.h,
then any third-party library headers, then the standard C++ library headers,
and finally the C library headers.
The
justification for this comes from John Lakos in
Large-Scale
C++ Software Design
(Addison-Wesley, 1996):
Latent
usage errors can be avoided by ensuring that the .h file of a component parses
by itself -- without externally-provided declarations or definitions...
Including the .h file as the very first line of the .c file ensures that no
critical piece of information intrinsic to the physical interface of the
component is missing from the .h file (or, if there is, that you will find out
about it as soon as you try to compile the .c file).
If
the order of header inclusion goes “from most specific to most
general,” then it’s more likely that if your header doesn’t
parse by itself, you’ll find out about it sooner and prevent annoyances
down the road.