|
|
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.