home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / _ansi.h < prev    next >
C/C++ Source or Header  |  2004-01-30  |  2KB  |  96 lines

  1. /* Provide support for both ANSI and non-ANSI environments.  */
  2.  
  3. /* Some ANSI environments are "broken" in the sense that __STDC__ cannot be
  4.    relied upon to have it's intended meaning.  Therefore we must use our own
  5.    concoction: _HAVE_STDC.  Always use _HAVE_STDC instead of __STDC__ in newlib
  6.    sources!
  7.  
  8.    To get a strict ANSI C environment, define macro __STRICT_ANSI__.  This will
  9.    "comment out" the non-ANSI parts of the ANSI header files (non-ANSI header
  10.    files aren't affected).  */
  11.  
  12. #ifndef    _ANSIDECL_H_
  13. #define    _ANSIDECL_H_
  14.  
  15. #include <newlib.h>
  16. #include <sys/config.h>
  17.  
  18. /* First try to figure out whether we really are in an ANSI C environment.  */
  19. /* FIXME: This probably needs some work.  Perhaps sys/config.h can be
  20.    prevailed upon to give us a clue.  */
  21.  
  22. #ifdef __STDC__
  23. #define _HAVE_STDC
  24. #endif
  25.  
  26. #ifdef _HAVE_STDC
  27. #define    _PTR        void *
  28. #define    _AND        ,
  29. #define    _NOARGS        void
  30. #define    _CONST        const
  31. #define    _VOLATILE    volatile
  32. #define    _SIGNED        signed
  33. #define    _DOTS        , ...
  34. #define _VOID void
  35. #ifdef __CYGWIN__
  36. #define    _EXFUN(name, proto)        __cdecl name proto
  37. #define    _EXPARM(name, proto)        (* __cdecl name) proto
  38. #else
  39. #define    _EXFUN(name, proto)        name proto
  40. #define _EXPARM(name, proto)        (* name) proto
  41. #endif
  42. #define    _DEFUN(name, arglist, args)    name(args)
  43. #define    _DEFUN_VOID(name)        name(_NOARGS)
  44. #define _CAST_VOID (void)
  45. #ifndef _LONG_DOUBLE
  46. #define _LONG_DOUBLE long double
  47. #endif
  48. #ifndef _PARAMS
  49. #define _PARAMS(paramlist)        paramlist
  50. #endif
  51. #else    
  52. #define    _PTR        char *
  53. #define    _AND        ;
  54. #define    _NOARGS
  55. #define    _CONST
  56. #define    _VOLATILE
  57. #define    _SIGNED
  58. #define    _DOTS
  59. #define _VOID void
  60. #define    _EXFUN(name, proto)        name()
  61. #define    _DEFUN(name, arglist, args)    name arglist args;
  62. #define    _DEFUN_VOID(name)        name()
  63. #define _CAST_VOID
  64. #define _LONG_DOUBLE double
  65. #ifndef _PARAMS
  66. #define _PARAMS(paramlist)        ()
  67. #endif
  68. #endif
  69.  
  70. /* Support gcc's __attribute__ facility.  */
  71.  
  72. #ifdef __GNUC__
  73. #define _ATTRIBUTE(attrs) __attribute__ (attrs)
  74. #else
  75. #define _ATTRIBUTE(attrs)
  76. #endif
  77.  
  78. /*  ISO C++.  */
  79.  
  80. #ifdef __cplusplus
  81. #if !(defined(_BEGIN_STD_C) && defined(_END_STD_C))
  82. #ifdef _HAVE_STD_CXX
  83. #define _BEGIN_STD_C namespace std { extern "C" {
  84. #define _END_STD_C  } }
  85. #else
  86. #define _BEGIN_STD_C extern "C" {
  87. #define _END_STD_C  }
  88. #endif
  89. #endif
  90. #else
  91. #define _BEGIN_STD_C
  92. #define _END_STD_C
  93. #endif
  94.  
  95. #endif /* _ANSIDECL_H_ */
  96.