ansi.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /* The <ansi.h> header checks whether the compiler claims conformance to ANSI
  2. * Standard C. If so, the symbol _ANSI is defined as 1, otherwise it is
  3. * defined as 0. Based on the result, a macro
  4. *
  5. * _PROTOTYPE(function, params)
  6. *
  7. * is defined. This macro expands in different ways, generating either
  8. * ANSI Standard C prototypes or old-style K&R (Kernighan & Ritchie)
  9. * prototypes, as needed. Finally, some programs use _CONST, _VOIDSTAR etc
  10. * in such a way that they are portable over both ANSI and K&R compilers.
  11. * The appropriate macros are defined here.
  12. */
  13. #ifndef _ANSI_H
  14. #define _ANSI_H
  15. /* ANSI C requires __STDC__ to be defined as 1 for an ANSI C compiler.
  16. * Some half-ANSI compilers define it as 0. Get around this here.
  17. */
  18. #define _ANSI 0 /* 0 if compiler is not ANSI C, 1 if it is */
  19. #ifdef __STDC__ /* __STDC__ defined for (near) ANSI compilers*/
  20. #if __STDC__ == 1 /* __STDC__ == 1 for conformant compilers */
  21. #undef _ANSI /* get rid of above definition */
  22. #define _ANSI 1 /* _ANSI = 1 for ANSI C compilers */
  23. #endif
  24. #endif
  25. /* At this point, _ANSI has been set correctly to 0 or 1. Define the
  26. * _PROTOTYPE macro to either expand both of its arguments (ANSI prototypes),
  27. * only the function name (K&R prototypes).
  28. */
  29. #if _ANSI
  30. #define _PROTOTYPE(function, params) function params
  31. #define _VOIDSTAR void *
  32. #define _VOID void
  33. #define _CONST const
  34. #define _VOLATILE volatile
  35. #define _SIZET size_t
  36. #else
  37. #define _PROTOTYPE(function, params) function()
  38. #define _VOIDSTAR void *
  39. #define _VOID void
  40. #define _CONST
  41. #define _VOLATILE
  42. #define _SIZET int
  43. #endif /* _ANSI */
  44. #endif /* ANSI_H */