|
|
1.1 root 1: /* ANSI and traditional C compatability macros
2: Copyright 1991 Free Software Foundation, Inc.
3: This file is part of the GNU C Library.
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License as published by
7: the Free Software Foundation; either version 2 of the License, or
8: (at your option) any later version.
9:
10: This program is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with this program; if not, write to the Free Software
17: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
18:
19: /* ANSI and traditional C compatibility macros
20:
21: ANSI C is assumed if __STDC__ is #defined.
22:
23: Macro ANSI C definition Traditional C definition
24: ----- ---- - ---------- ----------- - ----------
25: PTR `void *' `char *'
26: LONG_DOUBLE `long double' `double'
27: CONST `const' `'
28: VOLATILE `volatile' `'
29: SIGNED `signed' `'
30: PTRCONST `void *const' `char *'
31:
32: DEFUN(name, arglist, args)
33:
34: Defines function NAME.
35:
36: ARGLIST lists the arguments, separated by commas and enclosed in
37: parentheses. ARGLIST becomes the argument list in traditional C.
38:
39: ARGS list the arguments with their types. It becomes a prototype in
40: ANSI C, and the type declarations in traditional C. Arguments should
41: be separated with `AND'. For functions with a variable number of
42: arguments, the last thing listed should be `DOTS'.
43:
44: DEFUN_VOID(name)
45:
46: Defines a function NAME, which takes no arguments.
47:
48: EXFUN(name, prototype)
49:
50: Is used in an external function declaration.
51: In ANSI C it is `NAMEPROTOTYPE' (so PROTOTYPE should be enclosed in
52: parentheses). In traditional C it is `NAME()'.
53: For a function that takes no arguments, PROTOTYPE should be `(NOARGS)'.
54:
55: For example:
56: extern int EXFUN(printf, (CONST char *format DOTS));
57: int DEFUN(fprintf, (stream, format),
58: FILE *stream AND CONST char *format DOTS) { ... }
59: void DEFUN_VOID(abort) { ... }
60: */
61:
62: #ifndef _ANSIDECL_H
63:
64: #define _ANSIDECL_H 1
65:
66:
67: /* Every source file includes this file,
68: so they will all get the switch for lint. */
69: /* LINTLIBRARY */
70:
71:
72: #ifdef __STDC__
73:
74: #define PTR void *
75: #define PTRCONST void *CONST
76: #define LONG_DOUBLE long double
77:
78: #define AND ,
79: #define NOARGS void
80: #define CONST const
81: #define VOLATILE volatile
82: #define SIGNED signed
83: #define DOTS , ...
84:
85: #define EXFUN(name, proto) name proto
86: #define DEFUN(name, arglist, args) name(args)
87: #define DEFUN_VOID(name) name(NOARGS)
88:
89: #define PROTO(type, name, arglist) type name arglist
90:
91: /* We could use the EXFUN macro to handle prototypes, but
92: the name is misleading and the result is ugly. So just define a
93: simple macro to handle the parameter lists, as in:
94:
95: static int foo PARAMS ((int, char));
96:
97: EXFUN would do it like this:
98:
99: static int EXFUN (foo, (int, char));
100:
101: but the function is not external... EXFUN should be considered
102: obsolete, and new code written to use PARAMS. */
103:
104: #define PARAMS(paramlist) paramlist
105:
106: #else /* Not ANSI C. */
107:
108: #define PTR char *
109: #define PTRCONST PTR
110: #define LONG_DOUBLE double
111:
112: #define AND ;
113: #define NOARGS
114: #define CONST
115: #define VOLATILE
116: #define SIGNED
117: #define DOTS
118:
119: #define EXFUN(name, proto) name()
120: #define DEFUN(name, arglist, args) name arglist args;
121: #define DEFUN_VOID(name) name()
122: #define PROTO(type, name, arglist) type name ()
123: #define PARAMS(paramlist) ()
124:
125: #endif /* ANSI C. */
126:
127: #endif /* ansidecl.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.