File: /usr/include/sys/cdefs.h

1     /* Copyright (C) 1992,93,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
2        This file is part of the GNU C Library.
3     
4        The GNU C Library is free software; you can redistribute it and/or
5        modify it under the terms of the GNU Library General Public License as
6        published by the Free Software Foundation; either version 2 of the
7        License, or (at your option) any later version.
8     
9        The GNU C Library is distributed in the hope that it will be useful,
10        but WITHOUT ANY WARRANTY; without even the implied warranty of
11        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12        Library General Public License for more details.
13     
14        You should have received a copy of the GNU Library General Public
15        License along with the GNU C Library; see the file COPYING.LIB.  If not,
16        write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17        Boston, MA 02111-1307, USA.  */
18     
19     #ifndef	_SYS_CDEFS_H
20     #define	_SYS_CDEFS_H	1
21     
22     /* We are almost always included from features.h. */
23     #ifndef _FEATURES_H
24     # include <features.h>
25     #endif
26     
27     /* The GNU libc does not support any K&R compilers or the traditional mode
28        of ISO C compilers anymore.  Check for some of the combinations not
29        anymore supported.  */
30     #if defined __GNUC__ && !defined __STDC__
31     # error "You need a ISO C conforming compiler to use the glibc headers"
32     #endif
33     
34     /* Some user header file might have defined this before.  */
35     #undef	__P
36     #undef	__PMT
37     
38     #ifdef __GNUC__
39     
40     /* GCC can always grok prototypes.  For C++ programs we add throw()
41        to help it optimize the function calls.  But this works only with
42        gcc 2.8.x and egcs.  */
43     # if defined __cplusplus && __GNUC_PREREQ (2,8)
44     #  define __THROW	throw ()
45     # else
46     #  define __THROW
47     # endif
48     # define __P(args)	args __THROW
49     /* This macro will be used for functions which might take C++ callback
50        functions.  */
51     # define __PMT(args)	args
52     
53     #else	/* Not GCC.  */
54     
55     # define __inline		/* No inline functions.  */
56     
57     # define __THROW
58     # define __P(args)	args
59     # define __PMT(args)	args
60     
61     # define __const	const
62     # define __signed	signed
63     # define __volatile	volatile
64     
65     #endif	/* GCC.  */
66     
67     /* For these things, GCC behaves the ANSI way normally,
68        and the non-ANSI way under -traditional.  */
69     
70     #define __CONCAT(x,y)	x ## y
71     #define __STRING(x)	#x
72     
73     /* This is not a typedef so `const __ptr_t' does the right thing.  */
74     #define __ptr_t void *
75     #define __long_double_t  long double
76     
77     
78     /* C++ needs to know that types and declarations are C, not C++.  */
79     #ifdef	__cplusplus
80     # define __BEGIN_DECLS	extern "C" {
81     # define __END_DECLS	}
82     #else
83     # define __BEGIN_DECLS
84     # define __END_DECLS
85     #endif
86     
87     
88     /* Support for bounded pointers.  */
89     #ifndef __BOUNDED_POINTERS__
90     # define __bounded	/* nothing */
91     # define __unbounded	/* nothing */
92     # define __ptrvalue	/* nothing */
93     #endif
94     
95     
96     /* Support for flexible arrays.  */
97     #if __GNUC_PREREQ (2,97)
98     /* GCC 2.97 supports C99 flexible array members.  */
99     # define __flexarr	[]
100     #else
101     # ifdef __GNUC__
102     #  define __flexarr	[0]
103     # else
104     #  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
105     #   define __flexarr	[]
106     #  else
107     /* Some other non-C99 compiler.  Approximate with [1].  */
108     #   define __flexarr	[1]
109     #  endif
110     # endif
111     #endif
112     
113     
114     /* __asm__ ("xyz") is used throughout the headers to rename functions
115        at the assembly language level.  This is wrapped by the __REDIRECT
116        macro, in order to support compilers that can do this some other
117        way.  When compilers don't support asm-names at all, we have to do
118        preprocessor tricks instead (which don't have exactly the right
119        semantics, but it's the best we can do).
120     
121        Example:
122        int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
123     
124     #if defined __GNUC__ && __GNUC__ >= 2
125     
126     # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
127     # define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
128     # define __ASMNAME2(prefix, cname) __STRING (prefix) cname
129     
130     /*
131     #elif __SOME_OTHER_COMPILER__
132     
133     # define __REDIRECT(name, proto, alias) name proto; \
134     	_Pragma("let " #name " = " #alias)
135     */
136     #endif
137     
138     /* GCC has various useful declarations that can be made with the
139        `__attribute__' syntax.  All of the ways we use this do fine if
140        they are omitted for compilers that don't understand it. */
141     #if !defined __GNUC__ || __GNUC__ < 2
142     # define __attribute__(xyz)	/* Ignore */
143     #endif
144     
145     /* At some point during the gcc 2.96 development the `malloc' attribute
146        for functions was introduced.  We don't want to use it unconditionally
147        (although this would be possible) since it generates warnings.  */
148     #if __GNUC_PREREQ (2,96)
149     # define __attribute_malloc__ __attribute__ ((__malloc__))
150     #else
151     # define __attribute_malloc__ /* Ignore */
152     #endif
153     
154     /* At some point during the gcc 2.96 development the `pure' attribute
155        for functions was introduced.  We don't want to use it unconditionally
156        (although this would be possible) since it generates warnings.  */
157     #if __GNUC_PREREQ (2,96)
158     # define __attribute_pure__ __attribute__ ((__pure__))
159     #else
160     # define __attribute_pure__ /* Ignore */
161     #endif
162     
163     /* At some point during the gcc 2.8 development the `format_arg' attribute
164        for functions was introduced.  We don't want to use it unconditionally
165        (although this would be possible) since it generates warnings.  */
166     #if __GNUC_PREREQ (2,8)
167     # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
168     #else
169     # define __attribute_format_arg__(x) /* Ignore */
170     #endif
171     
172     /* At some point during the gcc 2.97 development the `strfmon' format
173        attribute for functions was introduced.  We don't want to use it
174        unconditionally (although this would be possible) since it
175        generates warnings.  */
176     #if __GNUC_PREREQ (2,97)
177     # define __attribute_format_strfmon__(a,b) \
178       __attribute__ ((__format__ (__strfmon__, a, b)))
179     #else
180     # define __attribute_format_strfmon__(a,b) /* Ignore */
181     #endif
182     
183     /* It is possible to compile containing GCC extensions even if GCC is
184        run in pedantic mode if the uses are carefully marked using the
185        `__extension__' keyword.  But this is not generally available before
186        version 2.8.  */
187     #if !__GNUC_PREREQ (2,8)
188     # define __extension__		/* Ignore */
189     #endif
190     
191     /* __restrict is known in EGCS 1.2 and above. */
192     #if !__GNUC_PREREQ (2,92)
193     # define __restrict	/* Ignore */
194     #endif
195     
196     /* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
197          array_name[restrict]
198        But gcc so far does not support this syntax.  We define a separate macro
199        for this which can be enabled if the underlying compiler supports it.  */
200     #define __restrict_arr
201     
202     #endif	 /* sys/cdefs.h */
203