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