cdefs.h
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:4k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1991, 1993
  3.  * The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * By using this file, you agree to the terms and conditions set
  6.  * forth in the LICENSE file which can be found at the top level of
  7.  * the sendmail distribution.
  8.  *
  9.  * $Id: cdefs.h,v 8.5 1999/06/02 22:32:17 gshapiro Exp $
  10.  * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
  11.  */
  12. #ifndef _CDEFS_H_
  13. # define _CDEFS_H_
  14. # if defined(__cplusplus)
  15. #  define __BEGIN_DECLS extern "C" {
  16. #  define __END_DECLS };
  17. # else /* defined(__cplusplus) */
  18. #  define __BEGIN_DECLS
  19. #  define __END_DECLS
  20. # endif /* defined(__cplusplus) */
  21. /*
  22.  * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  23.  * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
  24.  * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
  25.  * in between its arguments.  __CONCAT can also concatenate double-quoted
  26.  * strings produced by the __STRING macro, but this only works with ANSI C.
  27.  */
  28. # if defined(__STDC__) || defined(__cplusplus)
  29. #  define __P(protos) protos /* full-blown ANSI C */
  30. #  ifndef __CONCAT
  31. #   define __CONCAT(x,y) x ## y
  32. #  endif /* ! __CONCAT */
  33. #  define __STRING(x) #x
  34. #  ifndef __const
  35. #   define __const const /* define reserved names to standard */
  36. #  endif /* ! __const */
  37. #  define __signed signed
  38. #  define __volatile volatile
  39. #  if defined(__cplusplus)
  40. #   define __inline inline /* convert to C++ keyword */
  41. #  else /* defined(__cplusplus) */
  42. #   ifndef __GNUC__
  43. #    define __inline /* delete GCC keyword */
  44. #   endif /* ! __GNUC__ */
  45. #  endif /* defined(__cplusplus) */
  46. # else /* defined(__STDC__) || defined(__cplusplus) */
  47. #  define __P(protos) () /* traditional C preprocessor */
  48. #  ifndef __CONCAT
  49. #   define __CONCAT(x,y) x/**/y
  50. #  endif /* ! __CONCAT */
  51. #  define __STRING(x) "x"
  52. #  ifndef __GNUC__
  53. #   define __const /* delete pseudo-ANSI C keywords */
  54. #   define __inline
  55. #   define __signed
  56. #   define __volatile
  57. /*
  58.  * In non-ANSI C environments, new programs will want ANSI-only C keywords
  59.  * deleted from the program and old programs will want them left alone.
  60.  * When using a compiler other than gcc, programs using the ANSI C keywords
  61.  * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
  62.  * When using "gcc -traditional", we assume that this is the intent; if
  63.  * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
  64.  */
  65. #   ifndef NO_ANSI_KEYWORDS
  66. #    define const /* delete ANSI C keywords */
  67. #    define inline
  68. #    define signed
  69. #    define volatile
  70. #   endif /* ! NO_ANSI_KEYWORDS */
  71. #  endif /* ! __GNUC__ */
  72. # endif /* defined(__STDC__) || defined(__cplusplus) */
  73. /*
  74.  * GCC1 and some versions of GCC2 declare dead (non-returning) and
  75.  * pure (no side effects) functions using "volatile" and "const";
  76.  * unfortunately, these then cause warnings under "-ansi -pedantic".
  77.  * GCC2 uses a new, peculiar __attribute__((attrs)) style.  All of
  78.  * these work for GNU C++ (modulo a slight glitch in the C++ grammar
  79.  * in the distribution version of 2.5.5).
  80.  */
  81. # if !defined(__GNUC__) || __GNUC__ < 2 || 
  82. (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
  83. #  define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */
  84. #  if defined(__GNUC__) && !defined(__STRICT_ANSI__)
  85. #   define __dead __volatile
  86. #   define __pure __const
  87. #  endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) */
  88. # endif /* !defined(__GNUC__) || __GNUC__ < 2 ||  */
  89. /* Delete pseudo-keywords wherever they are not available or needed. */
  90. # ifndef __dead
  91. #  define __dead
  92. #  define __pure
  93. # endif /* ! __dead */
  94. #endif /* ! _CDEFS_H_ */