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