Next: Generic Types, Up: Types
These macros check for particular C types in sys/types.h, stdlib.h, stdint.h, inttypes.h and others, if they exist.
The Gnulib stdint
module is an alternate way to define many of
these symbols; it is useful if you prefer your code to assume a
C99-or-better environment. See Gnulib.
Define
GETGROUPS_T
to be whichever ofgid_t
orint
is the base type of the array argument togetgroups
.
If stdint.h or inttypes.h does not define the type
int8_t
, defineint8_t
to a signed integer type that is exactly 8 bits wide and that uses two's complement representation, if such a type exists. If you are worried about porting to hosts that lack such a type, you can use the results of this macro in C89-or-later code as follows:#if HAVE_STDINT_H # include <stdint.h> #endif #if defined INT8_MAX || defined int8_t code using int8_t #else complicated alternative using >8-bit 'signed char' #endif
If stdint.h or inttypes.h defines the type
intmax_t
, defineHAVE_INTMAX_T
. Otherwise, defineintmax_t
to the widest signed integer type.
If stdint.h or inttypes.h defines the type
intptr_t
, defineHAVE_INTPTR_T
. Otherwise, defineintptr_t
to a signed integer type wide enough to hold a pointer, if such a type exists.
If the C compiler supports a working
long double
type, defineHAVE_LONG_DOUBLE
. Thelong double
type might have the same range and precision asdouble
.This macro is obsolescent, as current C compilers support
long double
. New programs need not use this macro.
If the C compiler supports a working
long double
type with more range or precision than thedouble
type, defineHAVE_LONG_DOUBLE_WIDER
.
If the C compiler supports a working
long long int
type, defineHAVE_LONG_LONG_INT
. However, this test does not testlong long int
values in preprocessor#if
expressions, because too many compilers mishandle such expressions. See Preprocessor Arithmetic.
Define
HAVE_MBSTATE_T
if<wchar.h>
declares thembstate_t
type. Also, definembstate_t
to be a type if<wchar.h>
does not declare it.
Define
uid_t
andgid_t
to suitable types, if standard headers do not define them.
If stdint.h or inttypes.h does not define the type
uint8_t
, defineuint8_t
to an unsigned integer type that is exactly 8 bits wide, if such a type exists. This is likeAC_TYPE_INT8_T
, except for unsigned integers.
If stdint.h or inttypes.h defines the type
uintmax_t
, defineHAVE_UINTMAX_T
. Otherwise, defineuintmax_t
to the widest unsigned integer type.
If stdint.h or inttypes.h defines the type
uintptr_t
, defineHAVE_UINTPTR_T
. Otherwise, defineuintptr_t
to an unsigned integer type wide enough to hold a pointer, if such a type exists.
If the C compiler supports a working
unsigned long long int
type, defineHAVE_UNSIGNED_LONG_LONG_INT
. However, this test does not testunsigned long long int
values in preprocessor#if
expressions, because too many compilers mishandle such expressions. See Preprocessor Arithmetic.