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

Last change on this file since 1706 was 1392, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r1391,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 10.7 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
91 return result;
92 }