| @node stdint.h | |
| @section @file{stdint.h} | |
| POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/stdint.h.html} | |
| Gnulib module: stdint-h | |
| @mindex stdint-h | |
| Portability problems fixed by Gnulib: | |
| @itemize | |
| @item | |
| This header file is missing on some platforms: | |
| OpenBSD 3.8, AIX 5.1, HP-UX 11.11, MSVC 9. | |
| @item | |
| This header file is very incomplete on some platforms. | |
| @item | |
| The values of @code{SIG_ATOMIC_MIN} and @code{SIG_ATOMIC_MAX} are incorrect | |
| on some platforms: | |
| FreeBSD 6.2/ia64, FreeBSD 13.0/arm64. | |
| @item | |
| The value of @code{WINT_MAX} is incorrect on some platforms: | |
| mingw. | |
| @item | |
| The values of @code{INT8_MAX}, @code{UINT8_MAX} etc. are not usable in | |
| preprocessor expressions on some platforms: | |
| HP-UX 11.23. | |
| @item | |
| The values of @code{INTPTR_MAX} and @code{UINTPTR_MAX}, although correctly | |
| defined in @code{<stdint.h>}, are replaced by empty values when | |
| @code{<limits.h>} or @code{<inttypes.h>} gets included later on some platforms: | |
| Solaris 9 with GCC 4.5 or newer. | |
| @item | |
| The macros @code{WCHAR_MIN} and @code{WCHAR_MAX} are not defined in | |
| @code{<stdint.h>} (only in @code{<wchar.h>}) on some platforms: | |
| Dragonfly. | |
| @item | |
| On some hosts that predate C++11, when using C++ one must define | |
| @code{__STDC_CONSTANT_MACROS} to make visible the definitions of | |
| constant macros such as @code{INTMAX_C}, and one must define | |
| @code{__STDC_LIMIT_MACROS} to make visible the definitions of limit | |
| macros such as @code{INTMAX_MAX}. | |
| @item | |
| The macro @code{SIZE_MAX} has the wrong type, | |
| albeit with the correct value: | |
| 32-bit glibc 2.24 (on s390 architecture), Mac OS X 10.7. | |
| @item | |
| Macros like @code{INTMAX_WIDTH} are not defined on some platforms: | |
| glibc 2.24, NetBSD 10.0, many others. | |
| @end itemize | |
| Portability problems not fixed by Gnulib: | |
| @itemize | |
| @item | |
| @code{@{uint,int@}_fast@{8,16,32,64@}_t} may not correspond to the fastest | |
| types available on the system. | |
| Other @code{<stdint.h>} substitutes may define these types differently, | |
| so public header files should avoid these types. | |
| @item | |
| Macros are used instead of typedefs. | |
| @item | |
| Some C preprocessors mishandle constants that do not fit in @code{long int}. | |
| For example, as of 2007, Sun C mishandled @code{#if LLONG_MIN < 0} on | |
| a platform with 32-bit @code{long int} and 64-bit @code{long long int}; | |
| this bug was fixed on or before Oracle Developer Studio 12.6 | |
| (Sun C 5.15 SunOS_sparc 2017/05/30). | |
| Some older preprocessors mishandle constants ending in @code{LL}. | |
| To work around these problems, compute the value of expressions like | |
| @code{LONG_MAX < LLONG_MAX} at @code{configure}-time rather than at | |
| @code{#if}-time. | |
| @end itemize | |
| The @code{stdint-h} module uses @code{#include_next}. If you wish to install | |
| the generated stdint.h file under another name, typically in order to | |
| be able to use some of the types defined by stdint.h in your public | |
| header file, you could use the following Makefile.am-snippet: | |
| @example | |
| BUILT_SOURCES += idn-int.h | |
| DISTCLEANFILES += idn-int.h | |
| nodist_include_HEADERS += idn-int.h | |
| idn-int.h: | |
| if test -n "$(STDINT_H)"; then \ | |
| sed -e s/include_next/include/ gl/stdint.h > idn-int.h; \ | |
| else \ | |
| echo '#include <stdint.h>' > idn-int.h; \ | |
| fi | |
| @end example |