Next: stdio.h, Previous: stddef.h, Up: ISO C and POSIX Header File Substitutes [Contents][Index]
POSIX specification:
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html
Gnulib module: stdint
Portability problems fixed by Gnulib:
SIG_ATOMIC_MIN
and SIG_ATOMIC_MAX
are incorrect
on some platforms:
FreeBSD 6.2/ia64, FreeBSD 13.0/arm64.
WINT_MAX
is incorrect on some platforms:
mingw.
INT8_MAX
, UINT8_MAX
etc. are not usable in
preprocessor expressions on some platforms:
HP-UX 11.23.
INTPTR_MAX
and UINTPTR_MAX
, although correctly
defined in <stdint.h>
, are replaced by empty values when
<limits.h>
or <inttypes.h>
gets included later on some platforms:
Solaris 9 with GCC 4.5 or newer.
WCHAR_MIN
and WCHAR_MAX
are not defined in
<stdint.h>
(only in <wchar.h>
) on some platforms:
Dragonfly.
__STDC_CONSTANT_MACROS
to make visible the definitions of
constant macros such as INTMAX_C
, and one must define
__STDC_LIMIT_MACROS
to make visible the definitions of limit
macros such as INTMAX_MAX
.
SIZE_MAX
has the wrong type,
albeit with the correct value:
32-bit glibc 2.24 (on s390 architecture), Mac OS X 10.7.
INTMAX_WIDTH
are not defined on some platforms:
glibc 2.24, NetBSD 10.0, many others.
Portability problems not fixed by Gnulib:
{uint,int}_fast{8,16,32,64}_t
may not correspond to the fastest
types available on the system.
Other <stdint.h>
substitutes may define these types differently,
so public header files should avoid these types.
long int
.
For example, as of 2007, Sun C mishandled #if LLONG_MIN < 0
on
a platform with 32-bit long int
and 64-bit 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 LL
.
To work around these problems, compute the value of expressions like
LONG_MAX < LLONG_MAX
at configure
-time rather than at
#if
-time.
The stdint
module uses #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:
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
Next: stdio.h, Previous: stddef.h, Up: ISO C and POSIX Header File Substitutes [Contents][Index]