"Fossies" - the Fresh Open Source Software Archive

Member "CSSC-1.4.1/gl/tests/stdbool.in.h" (7 Feb 2016, 5114 Bytes) of package /linux/privat/CSSC-1.4.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "stdbool.in.h": 1.4.0_vs_1.4.1.

    1 /* Copyright (C) 2001-2003, 2006-2016 Free Software Foundation, Inc.
    2    Written by Bruno Haible <haible@clisp.cons.org>, 2001.
    3 
    4    This program is free software; you can redistribute it and/or modify
    5    it under the terms of the GNU General Public License as published by
    6    the Free Software Foundation; either version 3, or (at your option)
    7    any later version.
    8 
    9    This program is distributed in the hope that it will be useful,
   10    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   12    GNU General Public License for more details.
   13 
   14    You should have received a copy of the GNU General Public License
   15    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
   16 
   17 #ifndef _GL_STDBOOL_H
   18 #define _GL_STDBOOL_H
   19 
   20 /* ISO C 99 <stdbool.h> for platforms that lack it.  */
   21 
   22 /* Usage suggestions:
   23 
   24    Programs that use <stdbool.h> should be aware of some limitations
   25    and standards compliance issues.
   26 
   27    Standards compliance:
   28 
   29        - <stdbool.h> must be #included before 'bool', 'false', 'true'
   30          can be used.
   31 
   32        - You cannot assume that sizeof (bool) == 1.
   33 
   34        - Programs should not undefine the macros bool, true, and false,
   35          as C99 lists that as an "obsolescent feature".
   36 
   37    Limitations of this substitute, when used in a C89 environment:
   38 
   39        - <stdbool.h> must be #included before the '_Bool' type can be used.
   40 
   41        - You cannot assume that _Bool is a typedef; it might be a macro.
   42 
   43        - Bit-fields of type 'bool' are not supported.  Portable code
   44          should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
   45 
   46        - In C99, casts and automatic conversions to '_Bool' or 'bool' are
   47          performed in such a way that every nonzero value gets converted
   48          to 'true', and zero gets converted to 'false'.  This doesn't work
   49          with this substitute.  With this substitute, only the values 0 and 1
   50          give the expected result when converted to _Bool' or 'bool'.
   51 
   52        - C99 allows the use of (_Bool)0.0 in constant expressions, but
   53          this substitute cannot always provide this property.
   54 
   55    Also, it is suggested that programs use 'bool' rather than '_Bool';
   56    this isn't required, but 'bool' is more common.  */
   57 
   58 
   59 /* 7.16. Boolean type and values */
   60 
   61 /* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
   62    definitions below, but temporarily we have to #undef them.  */
   63 #if defined __BEOS__ && !defined __HAIKU__
   64 # include <OS.h> /* defines bool but not _Bool */
   65 # undef false
   66 # undef true
   67 #endif
   68 
   69 #ifdef __cplusplus
   70 # define _Bool bool
   71 # define bool bool
   72 #else
   73 # if defined __BEOS__ && !defined __HAIKU__
   74   /* A compiler known to have 'bool'.  */
   75   /* If the compiler already has both 'bool' and '_Bool', we can assume they
   76      are the same types.  */
   77 #  if !@HAVE__BOOL@
   78 typedef bool _Bool;
   79 #  endif
   80 # else
   81 #  if !defined __GNUC__
   82    /* If @HAVE__BOOL@:
   83         Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
   84         the built-in _Bool type is used.  See
   85           http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
   86           http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
   87           http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
   88         Similar bugs are likely with other compilers as well; this file
   89         wouldn't be used if <stdbool.h> was working.
   90         So we override the _Bool type.
   91       If !@HAVE__BOOL@:
   92         Need to define _Bool ourselves. As 'signed char' or as an enum type?
   93         Use of a typedef, with SunPRO C, leads to a stupid
   94           "warning: _Bool is a keyword in ISO C99".
   95         Use of an enum type, with IRIX cc, leads to a stupid
   96           "warning(1185): enumerated type mixed with another type".
   97         Even the existence of an enum type, without a typedef,
   98           "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
   99         The only benefit of the enum, debuggability, is not important
  100         with these compilers.  So use 'signed char' and no enum.  */
  101 #   define _Bool signed char
  102 #  else
  103    /* With this compiler, trust the _Bool type if the compiler has it.  */
  104 #   if !@HAVE__BOOL@
  105    /* For the sake of symbolic names in gdb, define true and false as
  106       enum constants, not only as macros.
  107       It is tempting to write
  108          typedef enum { false = 0, true = 1 } _Bool;
  109       so that gdb prints values of type 'bool' symbolically.  But then
  110       values of type '_Bool' might promote to 'int' or 'unsigned int'
  111       (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
  112       (see ISO C 99 6.3.1.1.(2)).  So add a negative value to the
  113       enum; this ensures that '_Bool' promotes to 'int'.  */
  114 typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
  115 #   endif
  116 #  endif
  117 # endif
  118 # define bool _Bool
  119 #endif
  120 
  121 /* The other macros must be usable in preprocessor directives.  */
  122 #ifdef __cplusplus
  123 # define false false
  124 # define true true
  125 #else
  126 # define false 0
  127 # define true 1
  128 #endif
  129 
  130 #define __bool_true_false_are_defined 1
  131 
  132 #endif /* _GL_STDBOOL_H */