| @node stdbool.h | |
| @section @file{stdbool.h} | |
| POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/stdbool.h.html} | |
| Gnulib module: stdbool-h-c99 | |
| @mindex stdbool-h-c99 | |
| @mindex bool | |
| The @code{stdbool-h-c99} module is present only for programs that | |
| formerly used the old @code{stdbool} module for C99 compatibility, | |
| and that for some reason cannot use the current @code{bool} module | |
| for C23 compatibility. | |
| Portability problems fixed by Gnulib: | |
| @itemize | |
| @item | |
| This header file is missing on some platforms: | |
| AIX 5.1, HP-UX 11. | |
| @item | |
| This header file is not usable in C++ mode with the vendor compiler | |
| on Solaris 10. | |
| @item | |
| Some compilers have bugs relating to @samp{bool}. | |
| @item | |
| This header file defines @code{true} incorrectly on some platforms: | |
| OpenBSD 4.7 with gcc 2.95. | |
| @end itemize | |
| Portability problems not fixed by Gnulib: | |
| @itemize | |
| @item | |
| @samp{_Bool} cannot be used before @code{<stdbool.h>} is included, or if | |
| the program is intended to be compiled by a C++ compiler. | |
| (With the advent of C23, @samp{_Bool} is obsolescent anyway.) | |
| @item | |
| You cannot assume that @code{_Bool} is a keyword or a typedef; | |
| @c In ISO C 99 § 6.4.1.(1) it is listed as a keyword. | |
| @c Older releases of Mac OS X and FreeBSD define it as a typedef. | |
| it might be a macro. | |
| For example, C23 allows @code{_Bool} to be a macro. | |
| @c See ISO C 23 § 6.4.1.(3) footnote 63. | |
| @item | |
| Bit-fields of type @samp{bool} are not supported. Portable code | |
| should use @samp{unsigned int foo : 1;} rather than @samp{bool foo : 1;}. | |
| @item | |
| Casts and automatic conversions to @samp{bool} don't test against the | |
| zero value or the null pointer, as they should. Such casts should only | |
| be used if the value is known to be equal to 0 or 1. | |
| @item | |
| You cannot assume that casting a floating point literal to @samp{bool} will | |
| result in a constant expression. | |
| @end itemize |