source: trunk/src/gcc/include/ansidecl.h@ 833

Last change on this file since 833 was 2, checked in by bird, 23 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 9.3 KB
Line 
1/* ANSI and traditional C compatability macros
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
3 Free Software Foundation, Inc.
4 This file is part of the GNU C Library.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20/* ANSI and traditional C compatibility macros
21
22 ANSI C is assumed if __STDC__ is #defined.
23
24 Macro ANSI C definition Traditional C definition
25 ----- ---- - ---------- ----------- - ----------
26 ANSI_PROTOTYPES 1 not defined
27 PTR `void *' `char *'
28 PTRCONST `void *const' `char *'
29 LONG_DOUBLE `long double' `double'
30 const not defined `'
31 volatile not defined `'
32 signed not defined `'
33 VA_START(ap, var) va_start(ap, var) va_start(ap)
34
35 Note that it is safe to write "void foo();" indicating a function
36 with no return value, in all K+R compilers we have been able to test.
37
38 For declaring functions with prototypes, we also provide these:
39
40 PARAMS ((prototype))
41 -- for functions which take a fixed number of arguments. Use this
42 when declaring the function. When defining the function, write a
43 K+R style argument list. For example:
44
45 char *strcpy PARAMS ((char *dest, char *source));
46 ...
47 char *
48 strcpy (dest, source)
49 char *dest;
50 char *source;
51 { ... }
52
53
54 VPARAMS ((prototype, ...))
55 -- for functions which take a variable number of arguments. Use
56 PARAMS to declare the function, VPARAMS to define it. For example:
57
58 int printf PARAMS ((const char *format, ...));
59 ...
60 int
61 printf VPARAMS ((const char *format, ...))
62 {
63 ...
64 }
65
66 For writing functions which take variable numbers of arguments, we
67 also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These
68 hide the differences between K+R <varargs.h> and C89 <stdarg.h> more
69 thoroughly than the simple VA_START() macro mentioned above.
70
71 VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end.
72 Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls
73 corresponding to the list of fixed arguments. Then use va_arg
74 normally to get the variable arguments, or pass your va_list object
75 around. You do not declare the va_list yourself; VA_OPEN does it
76 for you.
77
78 Here is a complete example:
79
80 int
81 printf VPARAMS ((const char *format, ...))
82 {
83 int result;
84
85 VA_OPEN (ap, format);
86 VA_FIXEDARG (ap, const char *, format);
87
88 result = vfprintf (stdout, format, ap);
89 VA_CLOSE (ap);
90