sed in 'foo.h' as follows:

     #ifndef FOO_H
     #define FOO_H 1

     /* The above macro definitions. */
     #include "..."

     BEGIN_C_DECLS

     int foo PARAMS((void));
     int hello PARAMS((void));

     END_C_DECLS

     #endif /* !FOO_H */

   Note that the '#ifndef FOO_H' prevents the body of 'foo.h' from being
read more than once in a given compilation.

   Also the only thing that must go outside the
'BEGIN_C_DECLS'/'END_C_DECLS' pair are '#include' lines.  Strictly
speaking it is only C symbol names that need to be protected, but your
header files will be more maintainable if you have a single pair of
these macros around the majority of the header contents.

   You should use these definitions of 'PARAMS', 'BEGIN_C_DECLS', and
'END_C_DECLS' into your own headers.  Then, you may use them to create
header files that are valid for C++, ANSI, and non-ANSI compilers(1).

   Do not be naive about writing portable code.  Following the tips
given above will help you miss the most obvious problems, but there are
definitely other subtle portability issues.  You may need to cope with
some of the following issues:

   * Pre-ANSI compilers do not always support the 'void *' generic
     pointer type, and so need to use 'char *' in its place.

   * The 'const', 'inline' and 'signed' keywords are not supported by
     some compilers, especially pre-ANSI compilers.

   * The 'long double' type is not supported by many compilers.

   ---------- Footnotes ----------

   (1) We used to recommend '__P', '__BEGIN_DECLS' and '__END_DECLS'.
This was bad advice since symbols (even preprocessor macro names) that
begin with an underscore are reserved for the use of the compiler.

