|
|
1.1 root 1: /* ANSI and traditional C compatability macros
2: Copyright 1991, 1992 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: VOLATILE `volatile' `'
28: SIGNED `signed' `'
29: PTRCONST `void *const' `char *'
30:
31: CONST is also defined, but is obsolete. Just use const.
32:
33: DEFUN (name, arglist, args)
34:
35: Defines function NAME.
36:
37: ARGLIST lists the arguments, separated by commas and enclosed in
38: parentheses. ARGLIST becomes the argument list in traditional C.
39:
40: ARGS list the arguments with their types. It becomes a prototype in
41: ANSI C, and the type declarations in traditional C. Arguments should
42: be separated with `AND'. For functions with a variable number of
43: arguments, the last thing listed should be `DOTS'.
44:
45: DEFUN_VOID (name)
46:
47: Defines a function NAME, which takes no arguments.
48:
49: obsolete -- EXFUN (name, (prototype)) -- obsolete.
50:
51: Replaced by PARAMS. Do not use; will disappear someday soon.
52: Was used in external function declarations.
53: In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in
54: parentheses). In traditional C it is `NAME()'.
55: For a function that takes no arguments, PROTOTYPE should be `(void)'.
56:
57: PARAMS ((args))
58:
59: We could use the EXFUN macro to handle prototype declarations, but
60: the name is misleading and the result is ugly. So we just define a
61: simple macro to handle the parameter lists, as in:
62:
63: static int foo PARAMS ((int, char));
64:
65: This produces: `static int foo();' or `static int foo (int, char);'
66:
67: EXFUN would have done it like this:
68:
69: static int EXFUN (foo, (int, char));
70:
71: but the function is not external...and it's hard to visually parse
72: the function name out of the mess. EXFUN should be considered
73: obsolete; new code should be written to use PARAMS.
74:
75: For example:
76: extern int printf PARAMS ((CONST char *format DOTS));
77: int DEFUN(fprintf, (stream, format),
78: FILE *stream AND CONST char *format DOTS) { ... }
79: void DEFUN_VOID(abort) { ... }
80: */
81:
82: #ifndef _ANSIDECL_H
83:
84: #define _ANSIDECL_H 1
85:
86:
87: /* Every source file includes this file,
88: so they will all get the switch for lint. */
89: /* LINTLIBRARY */
90:
91:
92: #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4))
93: /* All known AIX compilers implement these things (but don't always
94: define __STDC__). The RISC/OS MIPS compiler defines these things
95: in SVR4 mode, but does not define __STDC__. */
96:
97: #define PTR void *
98: #define PTRCONST void *CONST
99: #define LONG_DOUBLE long double
100:
101: #define AND ,
102: #define NOARGS void
103: #define CONST const
104: #define VOLATILE volatile
105: #define SIGNED signed
106: #define DOTS , ...
107:
108: #define EXFUN(name, proto) name proto
109: #define DEFUN(name, arglist, args) name(args)
110: #define DEFUN_VOID(name) name(void)
111:
112: #define PROTO(type, name, arglist) type name arglist
113: #define PARAMS(paramlist) paramlist
114:
115: #else /* Not ANSI C. */
116:
117: #define PTR char *
118: #define PTRCONST PTR
119: #define LONG_DOUBLE double
120:
121: #define AND ;
122: #define NOARGS
123: #define CONST
124: #ifndef const /* some systems define it in header files for non-ansi mode */
125: #define const
126: #endif
127: #define VOLATILE
128: #define SIGNED
129: #define DOTS
130:
131: #define EXFUN(name, proto) name()
132: #define DEFUN(name, arglist, args) name arglist args;
133: #define DEFUN_VOID(name) name()
134: #define PROTO(type, name, arglist) type name ()
135: #define PARAMS(paramlist) ()
136:
137: #endif /* ANSI C. */
138:
139: #endif /* ansidecl.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.