|
|
Appropriate use of __STDC__ produces a header file that can be used for both old and new compilers:
header.h:The following function uses prototypes and can still be compiled on an older system:struct s { /* ... */ }; #ifdef __STDC__ void errmsg(int, ...); struct s *f(const char *); int g(void); #else void errmsg(); struct s *f(); int g(); #endif
struct s *
#ifdef __STDC__
f(const char *p)
#else
f(p) char *p;
#endif
{
/* ... */
}
The following is an updated source file (as with choice 3 above).
The local function still uses an old style definition,
but a prototype is included for newer compilers:
source.c:#include <header.h> typedef /* ... */ MyType; #ifdef __STDC__ static void del(MyType *); /* ... */ #endif static void del(p) MyType *p; { /* ... */ } /* ... */