// vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=txt:

/** \page header_rules Rules for header file inclusion

 - Header files should always successfully compile standalone. Use the "make
   header_file_check" makefile target to test this.

 - Header files in include/smbios should only include other headers in include/
   or system headers.

 - Header files should _never_ include a "using namespace" directive.

 - if "file.h" is in our source tree use "file.h" like this:
 \verbatim #include "file.h" \endverbatim 
 - all other header files use <file.h>, like this:
 \verbatim #include <file.h> \endverbatim

 - Always use 'C'-style comments in header files: \/* ... *\/

 - header file order in HEADER files
    - Always include "smbios/compat.h" first.
    - Include system includes next
    - Include "smbios/types.h" next, if necessary
    - include any "I*.h" interface headers next
    - include any other includes

 - header file order in C++ code  
    - If you have _any_ system includes, include "smbios/compat.h" first
    - Include system includes next, if necessary
    - Should _rarely_ have to include "types.h", should be in a header already.
    - Include any "I*.h" interface headers next
    - all others


Here is an example header file:

\verbatim
// standard include guard... prevent multiple inclusion
#ifndef SMBIOSINTERFACE_H
#define SMBIOSINTERFACE_H

// compat header should always be first header
#include "smbios/compat.h"

// next include system header files
#include <cstdlib>		// Provides size_t and NULL
#include <iostream>
#include <string>
#include <map>
#include <memory>       // Provides auto_ptr<>

// types.h should be first user-defined header.
#include "smbios/types.h"  

// include other smbios/I*.h headers next
#include "smbios/IFactory.h"

     //....  declarations here ....

#endif /* SMBIOSINTERFACE_H */
\endverbatim
   
*/
