📄 cdefs.h
字号:
/* Copyright (C) 1992,93,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */#ifndef _SYS_CDEFS_H#define _SYS_CDEFS_H 1/* We are almost always included from features.h. */#ifndef _FEATURES_H# include <features.h>#endif/* The GNU libc does not support any K&R compilers or the traditional mode of ISO C compilers anymore. Check for some of the combinations not anymore supported. */#if defined __GNUC__ && !defined __STDC__# error "You need a ISO C conforming compiler to use the glibc headers"#endif/* Some user header file might have defined this before. */#undef __P#undef __PMT#ifdef __GNUC__/* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this works only with gcc 2.8.x and egcs. */# if defined __cplusplus && __GNUC_PREREQ (2,8)# define __THROW throw ()# else# define __THROW# endif# define __P(args) args __THROW/* This macro will be used for functions which might take C++ callback functions. */# define __PMT(args) args#else /* Not GCC. */# define __inline /* No inline functions. */# define __THROW# define __P(args) args# define __PMT(args) args# define __const const# define __signed signed# define __volatile volatile#endif /* GCC. *//* For these things, GCC behaves the ANSI way normally, and the non-ANSI way under -traditional. */#define __CONCAT(x,y) x ## y#define __STRING(x) #x/* This is not a typedef so `const __ptr_t' does the right thing. */#define __ptr_t void *#define __long_double_t long double/* C++ needs to know that types and declarations are C, not C++. */#ifdef __cplusplus# define __BEGIN_DECLS extern "C" {# define __END_DECLS }#else# define __BEGIN_DECLS# define __END_DECLS#endif/* Support for bounded pointers. */#ifndef __BOUNDED_POINTERS__# define __bounded /* nothing */# define __unbounded /* nothing */# define __ptrvalue /* nothing */#endif/* Support for flexible arrays. */#if __GNUC_PREREQ (2,97)/* GCC 2.97 supports C99 flexible array members. */# define __flexarr []#else# ifdef __GNUC__# define __flexarr [0]# else# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L# define __flexarr []# else/* Some other non-C99 compiler. Approximate with [1]. */# define __flexarr [1]# endif# endif#endif/* __asm__ ("xyz") is used throughout the headers to rename functions at the assembly language level. This is wrapped by the __REDIRECT macro, in order to support compilers that can do this some other way. When compilers don't support asm-names at all, we have to do preprocessor tricks instead (which don't have exactly the right semantics, but it's the best we can do). Example: int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */#if defined __GNUC__ && __GNUC__ >= 2# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)# define __ASMNAME2(prefix, cname) __STRING (prefix) cname/*#elif __SOME_OTHER_COMPILER__# define __REDIRECT(name, proto, alias) name proto; \ _Pragma("let " #name " = " #alias)*/#endif/* GCC has various useful declarations that can be made with the `__attribute__' syntax. All of the ways we use this do fine if they are omitted for compilers that don't understand it. */#if !defined __GNUC__ || __GNUC__ < 2# define __attribute__(xyz) /* Ignore */#endif/* At some point during the gcc 2.96 development the `malloc' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */#if __GNUC_PREREQ (2,96)# define __attribute_malloc__ __attribute__ ((__malloc__))#else# define __attribute_malloc__ /* Ignore */#endif/* At some point during the gcc 2.96 development the `pure' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */#if __GNUC_PREREQ (2,96)# define __attribute_pure__ __attribute__ ((__pure__))#else# define __attribute_pure__ /* Ignore */#endif/* At some point during the gcc 2.8 development the `format_arg' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. If several `format_arg' attributes are given for the same function, in gcc-3.0 and older, all but the last one are ignored. In newer gccs, all designated arguments are considered. */#if __GNUC_PREREQ (2,8)# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))#else# define __attribute_format_arg__(x) /* Ignore */#endif/* At some point during the gcc 2.97 development the `strfmon' format attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */#if __GNUC_PREREQ (2,97)# define __attribute_format_strfmon__(a,b) \ __attribute__ ((__format__ (__strfmon__, a, b)))#else# define __attribute_format_strfmon__(a,b) /* Ignore */#endif/* It is possible to compile containing GCC extensions even if GCC is run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before version 2.8. */#if !__GNUC_PREREQ (2,8)# define __extension__ /* Ignore */#endif/* __restrict is known in EGCS 1.2 and above. */#if !__GNUC_PREREQ (2,92)# define __restrict /* Ignore */#endif/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is array_name[restrict] GCC 3.1 supports this. */#if __GNUC_PREREQ (3,1) && !defined __GNUG__# define __restrict_arr __restrict#else# ifdef __GNUC__# define __restrict_arr /* Not supported in old GCC. */# else# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L# define __restrict_arr restrict# else/* Some other non-C99 compiler. */# define __restrict_arr /* Not supported. */# endif# endif#endif#endif /* sys/cdefs.h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -