gnulib-tool.py: import mktemp
[gnulib.git] / doc / posix-headers / stdint.texi
blobd8b83956085f65c601af167b70cf5014aba0d104
1 @node stdint.h
2 @section @file{stdint.h}
4 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html}
6 Gnulib module: stdint
8 Portability problems fixed by Gnulib:
9 @itemize
10 @item
11 This header file is missing on some platforms:
12 OpenBSD 3.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, MSVC 14, Interix 3.5, BeOS.
13 @item
14 This header file is very incomplete on some platforms.
15 @item
16 The values of @code{SIG_ATOMIC_MIN} and @code{SIG_ATOMIC_MAX} are incorrect
17 on some platforms:
18 FreeBSD 6.2 / ia64.
19 @item
20 The value of @code{WINT_MAX} is incorrect on some platforms:
21 mingw.
22 @item
23 The values of @code{INT8_MAX}, @code{UINT8_MAX} etc. are not usable in
24 preprocessor expressions on some platforms:
25 HP-UX 11.23.
26 @item
27 The values of @code{INTPTR_MAX} and @code{UINTPTR_MAX}, although correctly
28 defined in @code{<stdint.h>}, are replaced by empty values when
29 @code{<limits.h>} or @code{<inttypes.h>} gets included later on some platforms:
30 Solaris 9 with GCC 4.5 or newer.
31 @item
32 The macros @code{WCHAR_MIN} and @code{WCHAR_MAX} are not defined in
33 @code{<stdint.h>} (only in @code{<wchar.h>}) on some platforms:
34 Dragonfly, BSDI.
35 @item
36 On some hosts that predate C++11, when using C++ one must define
37 @code{__STDC_CONSTANT_MACROS} to make visible the definitions of
38 constant macros such as @code{INTMAX_C}, and one must define
39 @code{__STDC_LIMIT_MACROS} to make visible the definitions of limit
40 macros such as @code{INTMAX_MAX}.
41 @item
42 The macro @code{SIZE_MAX} has the wrong type,
43 albeit with the correct value:
44 32-bit glibc 2.24 (on s390 architecture), Mac OS X 10.7.
45 @item
46 Macros like @code{INTMAX_WIDTH} are not defined on some platforms:
47 glibc 2.24, many others.
48 @end itemize
50 Portability problems not fixed by Gnulib:
51 @itemize
52 @item
53 @code{@{uint,int@}_fast@{8,16,32,64@}_t} may not correspond to the fastest
54 types available on the system.
55 Other @code{<stdint.h>} substitutes may define these types differently,
56 so public header files should avoid these types.
57 @item
58 Macros are used instead of typedefs.
59 @item
60 Some C preprocessors mishandle constants that do not fit in @code{long int}.
61 For example, as of 2007, Sun C mishandles @code{#if LLONG_MIN < 0} on
62 a platform with 32-bit @code{long int} and 64-bit @code{long long int}.
63 Some older preprocessors mishandle constants ending in @code{LL}.
64 To work around these problems, compute the value of expressions like
65 @code{LONG_MAX < LLONG_MAX} at @code{configure}-time rather than at
66 @code{#if}-time.
67 @end itemize
69 The stdint.h module uses @code{#include_next}.  If you wish to install
70 the generated stdint.h file under another name, typically in order to
71 be able to use some of the types defined by stdint.h in your public
72 header file, you could use the following Makefile.am-snippet:
74 @example
76 BUILT_SOURCES += idn-int.h
77 DISTCLEANFILES += idn-int.h
78 nodist_include_HEADERS += idn-int.h
80 idn-int.h:
81         if test -n "$(STDINT_H)"; then \
82                 sed -e s/include_next/include/ gl/stdint.h > idn-int.h; \
83         else \
84                 echo '#include <stdint.h>' > idn-int.h; \
85         fi
86 @end example