xref: /utopia/UTPA2-700.0.x/projects/tools/lint/aeon_include/_ansi.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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