1 /* Copyright (C) 1993 Nathan Sidwell */ 2 /* RCS $Id: ansiknr.h,v 4.6 1995/12/14 13:53:27 nathan Exp $ */ 3 /* macros to make both ANSI & K&R compilers happy */ 4 /* uses FUNCPROTO like Xfuncproto.h does, so you can tailor things */ 5 /*{{{ prototypes*/ 6 #if __STDC__ || FUNCPROTO & 1 7 # define PROTOARG(list) list 8 # define VOIDFUNC void 9 # define VOID void 10 # define FUNCARG(list, defs) (defs) 11 # define FUNCARGVOID () 12 # define ARGSEP , 13 # define VOIDARG void 14 # define FLOATARG float 15 # define FLOATFUNC float 16 #else 17 # define PROTOARG(list) () 18 # if STRICTKNR /* most knr compilers now understand void */ 19 # define VOIDFUNC int 20 # define VOID char 21 # else 22 # define VOIDFUNC void 23 # define VOID void 24 # endif /* NOVOID */ 25 # define FUNCARG(list, defs) list defs; 26 # define FUNCARGVOID () 27 # define ARGSEP ; 28 # define VOIDARG 29 # define FLOATARG double 30 # define FLOATFUNC double 31 #endif 32 /*}}}*/ 33 /*{{{ varargs prototypes*/ 34 #if __STDC__ || FUNCPROTO & 2 35 # define VARARG ... 36 # define VARARGDEF ... 37 # define FUNCVARARG(list, defs) (defs, ...) 38 # define VARARGSET(args, last) va_start(args, last) 39 # define PROTOVARARG(list) PROTOARG(list) 40 #else 41 # define VARARG int 42 # define VARARGDEF va_alist 43 # define FUNCVARARG(list, defs) list defs; va_dcl 44 # define VARARGSET(args, last) va_start(args) 45 # define PROTOVARARG(list) () 46 #endif 47 /*}}}*/ 48 /*{{{ nested prototypes*/ 49 #if __STDC__ || FUNCPROTO & 8 50 # define NESTEDPROTOARG(list) list 51 #else 52 # define NESTEDPROTOARG(list) () 53 #endif 54 /*}}}*/ 55 /*{{{ const, volatile*/ 56 #undef CONST 57 #undef VOLATILE 58 #if __STDC__ || FUNCPROTO & 4 59 # define CONST const 60 # define VOLATILE volatile 61 #else 62 # define CONST /* blank */ 63 # define VOLATILE /* blank */ 64 #endif 65 /*}}}*/ 66 #if __STDC__ || FUNCPROTO & 2 67 # include <stdarg.h> 68 #else /* !__STDC__ */ 69 # include <varargs.h> 70 #endif /* __STDC__ */ 71