Eric Lemings wrote:
Consider the following:
file $TOPDIR/include/memory:
...
 30 #ifndef _RWSTD_MEMORY_INCLUDED
 31 #define _RWSTD_MEMORY_INCLUDED
 32
 33 #include <rw/_allocator.h>
 34 #include <rw/_autoptr.h>
 35 #include <rw/_iterbase.h>
 36 #include <rw/_pair.h>
 37 #include <rw/_rawiter.h>
 38 #include <rw/_specialized.h>
 39 #include <rw/_defs.h>
 40
 41 #endif   // _RWSTD_MEMORY_INCLUDED

Any idea why <rw/_defs.h> is included last?  I've noticed this in a
couple other standard headers also.

As opposed to being first, or in the middle? What would be the
rationale?

The (undocumented) style for #include directives in stdcxx goes
something like this:

In all library headers:

1. standard headers (C++, including stdcxx own, C, or POSIX are
   never included (there are a shrinking number of exceptions to
   this rule)

2. include directives are in alphabetical order, with rw/_defs.h
   being last (it still ends up getting included first, indirectly,
   by the first header); the exception here is when a stdcxx config
   macro needs to be tested before the first #include directive

3. each #include directive in every standard header is guarded with
   a preprocessor conditional testing the XXX_INCLUDED macro for
   the corresponding header for compile-time efficiency

In library sources:

1. sets of C++, C, POSIX, and stdcxx-private headers are included
   in separate blocks of their own, in alphabetical order within
   each block
2. C headers are included using the xxx.h form (as opposed to the
   cxxx form) for better portability

Martin

Reply via email to