1 /* 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Berkeley Software Design, Inc. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the University of 19 * California, Berkeley and its contributors. 20 * 4. Neither the name of the University nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)cdefs.h 8.7 (Berkeley) 1/21/94 37 */ 38 39 #ifndef _CDEFS_H_ 40 #define _CDEFS_H_ 41 42 #if defined(__cplusplus) 43 #define __BEGIN_DECLS extern "C" { 44 #define __END_DECLS }; 45 #else 46 #define __BEGIN_DECLS 47 #define __END_DECLS 48 #endif 49 50 /* 51 * The __CONCAT macro is used to concatenate parts of symbol names, e.g. 52 * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. 53 * The __CONCAT macro is a bit tricky -- make sure you don't put spaces 54 * in between its arguments. __CONCAT can also concatenate double-quoted 55 * strings produced by the __STRING macro, but this only works with ANSI C. 56 */ 57 #if defined(__STDC__) || defined(__cplusplus) 58 #define __P(protos) protos /* full-blown ANSI C */ 59 #define __CONCAT(x,y) x ## y 60 #define __STRING(x) #x 61 62 #define __const const /* define reserved names to standard */ 63 #define __signed signed 64 #define __volatile volatile 65 #if defined(__cplusplus) 66 #define __inline inline /* convert to C++ keyword */ 67 #else 68 #ifndef __GNUC__ 69 #define __inline /* delete GCC keyword */ 70 #endif /* !__GNUC__ */ 71 #endif /* !__cplusplus */ 72 73 #else /* !(__STDC__ || __cplusplus) */ 74 #define __P(protos) () /* traditional C preprocessor */ 75 #define __CONCAT(x,y) x/**/y 76 #define __STRING(x) "x" 77 78 #ifndef __GNUC__ 79 #define __const /* delete pseudo-ANSI C keywords */ 80 #define __inline 81 #define __signed 82 #define __volatile 83 /* 84 * In non-ANSI C environments, new programs will want ANSI-only C keywords 85 * deleted from the program and old programs will want them left alone. 86 * When using a compiler other than gcc, programs using the ANSI C keywords 87 * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS. 88 * When using "gcc -traditional", we assume that this is the intent; if 89 * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone. 90 */ 91 #ifndef NO_ANSI_KEYWORDS 92 #define const /* delete ANSI C keywords */ 93 #define inline 94 #define signed 95 #define volatile 96 #endif 97 #endif /* !__GNUC__ */ 98 #endif /* !(__STDC__ || __cplusplus) */ 99 100 /* 101 * GCC1 and some versions of GCC2 declare dead (non-returning) and 102 * pure (no side effects) functions using "volatile" and "const"; 103 * unfortunately, these then cause warnings under "-ansi -pedantic". 104 * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of 105 * these work for GNU C++ (modulo a slight glitch in the C++ grammar 106 * in the distribution version of 2.5.5). 107 */ 108 #if !defined(__GNUC__) || __GNUC__ < 2 || __GNUC_MINOR__ < 5 109 #define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */ 110 #if defined(__GNUC__) && !defined(__STRICT_ANSI__) 111 #define __dead __volatile 112 #define __pure __const 113 #endif 114 #endif 115 116 /* Delete pseudo-keywords wherever they are not available or needed. */ 117 #ifndef __dead 118 #define __dead 119 #define __pure 120 #endif 121 122 #endif /* !_CDEFS_H_ */ 123