xref: /csrg-svn/contrib/gcc-2.3.3/gstddef.h (revision 57765)
1*57765Selan #ifndef _STDDEF_H
2*57765Selan #ifndef _STDDEF_H_
3*57765Selan #ifndef _ANSI_STDDEF_H
4*57765Selan 
5*57765Selan /* Any one of these symbols __need_* means that GNU libc
6*57765Selan    wants us just to define one data type.  So don't define
7*57765Selan    the symbols that indicate this file's entire job has been done.  */
8*57765Selan #if (!defined(__need_wchar_t) && !defined(__need_size_t)	\
9*57765Selan      && !defined(__need_ptrdiff_t) && !defined(__need_NULL))
10*57765Selan #define _STDDEF_H
11*57765Selan #define _STDDEF_H_
12*57765Selan /* snaroff@next.com says the NeXT needs this.  */
13*57765Selan #define _ANSI_STDDEF_H
14*57765Selan #endif
15*57765Selan 
16*57765Selan #ifndef __sys_stdtypes_h
17*57765Selan /* This avoids lossage on SunOS but only if stdtypes.h comes first.
18*57765Selan    There's no way to win with the other order!  Sun lossage.  */
19*57765Selan 
20*57765Selan /* On 4.3bsd-net2, make sure ansi.h is included, so we have
21*57765Selan    one less case to deal with in the following.  */
22*57765Selan #if defined (__BSD_NET2__) || defined (____386BSD____)
23*57765Selan #include <machine/ansi.h>
24*57765Selan #endif
25*57765Selan 
26*57765Selan /* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
27*57765Selan     defined if the corresponding type is *not* defined.  */
28*57765Selan #ifdef _ANSI_H_
29*57765Selan #ifndef _SIZE_T_
30*57765Selan #define _SIZE_T
31*57765Selan #endif
32*57765Selan #ifndef _PTRDIFF_T_
33*57765Selan #define _PTRDIFF_T
34*57765Selan #endif
35*57765Selan #ifndef _WCHAR_T_
36*57765Selan #define _WCHAR_T
37*57765Selan #endif
38*57765Selan #undef _PTRDIFF_T_
39*57765Selan #ifndef __need_ptrdiff_t
40*57765Selan #undef _SIZE_T_
41*57765Selan #undef _WCHAR_T_
42*57765Selan #endif
43*57765Selan #endif /* _ANSI_H_ */
44*57765Selan 
45*57765Selan /* In case nobody has defined these types, but we aren't running under
46*57765Selan    GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
47*57765Selan    __WCHAR_TYPE__ have reasonable values.  This can happen if the
48*57765Selan    parts of GCC is compiled by an older compiler, that actually
49*57765Selan    include gstddef.h, such as collect2.  */
50*57765Selan 
51*57765Selan /* Signed type of difference of two pointers.  */
52*57765Selan 
53*57765Selan /* Define this type if we are doing the whole job,
54*57765Selan    or if we want this type in particular.  */
55*57765Selan #if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
56*57765Selan #ifndef _PTRDIFF_T	/* in case <sys/types.h> has defined it. */
57*57765Selan #ifndef _T_PTRDIFF_
58*57765Selan #ifndef _T_PTRDIFF
59*57765Selan #ifndef __PTRDIFF_T
60*57765Selan #ifndef _PTRDIFF_T_
61*57765Selan #ifndef ___int_ptrdiff_t_h
62*57765Selan #ifndef _GCC_PTRDIFF_T
63*57765Selan #define _PTRDIFF_T
64*57765Selan #define _T_PTRDIFF_
65*57765Selan #define _T_PTRDIFF
66*57765Selan #define __PTRDIFF_T
67*57765Selan #define _PTRDIFF_T_
68*57765Selan #define ___int_ptrdiff_t_h
69*57765Selan #define _GCC_PTRDIFF_T
70*57765Selan #ifndef __PTRDIFF_TYPE__
71*57765Selan #define __PTRDIFF_TYPE__ long int
72*57765Selan #endif
73*57765Selan typedef __PTRDIFF_TYPE__ ptrdiff_t;
74*57765Selan #endif /* _GCC_PTRDIFF_T */
75*57765Selan #endif /* ___int_ptrdiff_t_h */
76*57765Selan #endif /* _PTRDIFF_T_ */
77*57765Selan #endif /* __PTRDIFF_T */
78*57765Selan #endif /* _T_PTRDIFF */
79*57765Selan #endif /* _T_PTRDIFF_ */
80*57765Selan #endif /* _PTRDIFF_T */
81*57765Selan 
82*57765Selan /* If this symbol has done its job, get rid of it.  */
83*57765Selan #undef	__need_ptrdiff_t
84*57765Selan 
85*57765Selan #endif /* _STDDEF_H or __need_ptrdiff_t.  */
86*57765Selan 
87*57765Selan /* Unsigned type of `sizeof' something.  */
88*57765Selan 
89*57765Selan /* Define this type if we are doing the whole job,
90*57765Selan    or if we want this type in particular.  */
91*57765Selan #if defined (_STDDEF_H) || defined (__need_size_t)
92*57765Selan #ifndef _SIZE_T	/* in case <sys/types.h> has defined it. */
93*57765Selan #ifndef _T_SIZE_
94*57765Selan #ifndef _T_SIZE
95*57765Selan #ifndef __SIZE_T
96*57765Selan #ifndef _SIZE_T_
97*57765Selan #ifndef ___int_size_t_h
98*57765Selan #ifndef _GCC_SIZE_T
99*57765Selan #ifndef _SIZET_
100*57765Selan #define _SIZE_T
101*57765Selan #define _T_SIZE_
102*57765Selan #define _T_SIZE
103*57765Selan #define __SIZE_T
104*57765Selan #define _SIZE_T_
105*57765Selan #define ___int_size_t_h
106*57765Selan #define _GCC_SIZE_T
107*57765Selan #define _SIZET_
108*57765Selan #ifndef __SIZE_TYPE__
109*57765Selan #define __SIZE_TYPE__ long unsigned int
110*57765Selan #endif
111*57765Selan typedef __SIZE_TYPE__ size_t;
112*57765Selan #endif /* _SIZET_ */
113*57765Selan #endif /* _GCC_SIZE_T */
114*57765Selan #endif /* ___int_size_t_h */
115*57765Selan #endif /* _SIZE_T_ */
116*57765Selan #endif /* __SIZE_T */
117*57765Selan #endif /* _T_SIZE */
118*57765Selan #endif /* _T_SIZE_ */
119*57765Selan #endif /* _SIZE_T */
120*57765Selan #undef	__need_size_t
121*57765Selan #endif /* _STDDEF_H or __need_size_t.  */
122*57765Selan 
123*57765Selan 
124*57765Selan /* Wide character type.
125*57765Selan    Locale-writers should change this as necessary to
126*57765Selan    be big enough to hold unique values not between 0 and 127,
127*57765Selan    and not (wchar_t) -1, for each defined multibyte character.  */
128*57765Selan 
129*57765Selan /* Define this type if we are doing the whole job,
130*57765Selan    or if we want this type in particular.  */
131*57765Selan #if defined (_STDDEF_H) || defined (__need_wchar_t)
132*57765Selan #ifndef _WCHAR_T
133*57765Selan #ifndef _T_WCHAR_
134*57765Selan #ifndef _T_WCHAR
135*57765Selan #ifndef __WCHAR_T
136*57765Selan #ifndef _WCHAR_T_
137*57765Selan #ifndef ___int_wchar_t_h
138*57765Selan #ifndef _GCC_WCHAR_T
139*57765Selan #define _WCHAR_T
140*57765Selan #define _T_WCHAR_
141*57765Selan #define _T_WCHAR
142*57765Selan #define __WCHAR_T
143*57765Selan #define _WCHAR_T_
144*57765Selan #define ___int_wchar_t_h
145*57765Selan #define _GCC_WCHAR_T
146*57765Selan #ifndef __WCHAR_TYPE__
147*57765Selan #define __WCHAR_TYPE__ int
148*57765Selan #endif
149*57765Selan #ifdef __GNUG__
150*57765Selan /* In C++, wchar_t is a distinct basic type,
151*57765Selan    and we can expect __wchar_t to be defined by cc1plus.  */
152*57765Selan typedef __wchar_t wchar_t;
153*57765Selan #else
154*57765Selan /* In C, cpp tells us which type to make an alias for.  */
155*57765Selan typedef __WCHAR_TYPE__ wchar_t;
156*57765Selan #endif
157*57765Selan #endif
158*57765Selan #endif
159*57765Selan #endif
160*57765Selan #endif
161*57765Selan #endif
162*57765Selan #endif
163*57765Selan #endif
164*57765Selan #undef	__need_wchar_t
165*57765Selan #endif /* _STDDEF_H or __need_wchar_t.  */
166*57765Selan 
167*57765Selan /*  In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
168*57765Selan     are already defined.  We need not worry about the case of wanting just
169*57765Selan     one of these types, not on 4.3bsd-net2, because only the GNU libc
170*57765Selan     header files do that.  */
171*57765Selan #ifdef _ANSI_H_
172*57765Selan #undef _PTRDIFF_T_
173*57765Selan #ifdef _STDDEF_H /* This is a kludge.
174*57765Selan 		    _STDDEF_H is defined when we are using the whole file,
175*57765Selan 		    undefined when obstack.h wants just ptrdiff_t.  */
176*57765Selan #undef _SIZE_T_
177*57765Selan #undef _WCHAR_T_
178*57765Selan #endif
179*57765Selan #endif
180*57765Selan 
181*57765Selan #endif /* __sys_stdtypes_h */
182*57765Selan 
183*57765Selan /* A null pointer constant.  */
184*57765Selan 
185*57765Selan #if defined (_STDDEF_H) || defined (__need_NULL)
186*57765Selan #undef NULL		/* in case <stdio.h> has defined it. */
187*57765Selan #define NULL ((void *)0)
188*57765Selan #endif	/* NULL not defined and <stddef.h> or need NULL.  */
189*57765Selan #undef	__need_NULL
190*57765Selan 
191*57765Selan #ifdef _STDDEF_H
192*57765Selan 
193*57765Selan /* Offset of member MEMBER in a struct of type TYPE.  */
194*57765Selan 
195*57765Selan #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
196*57765Selan 
197*57765Selan #endif /* _STDDEF_H was defined this time */
198*57765Selan 
199*57765Selan #endif /* _ANSI_STDDEF_H was not defined before */
200*57765Selan #endif /* _STDDEF_H_ was not defined before */
201*57765Selan #endif /* _STDDEF_H was not defined before */
202