NAME
__builtin_types_compatible_p —
GNU
extension to check equivalent types
SYNOPSIS
int
__builtin_types_compatible_p(
type_a,
type_b);
DESCRIPTION
The
__builtin_types_compatible_p() is a GNU extension for
determining whether two types are equivalent. If
type_a
is equivalent to
type_b, a value 1 is returned.
Otherwise
__builtin_types_compatible_p() returns 0.
The following remarks should be taken into account.
- The architecture-specific size of the two types does not
have an impact on the result. For example,
sizeof(char *) and
sizeof(int) result the same value
on i386, but the types naturally are not equivalent.
- Type qualifiers are ignored. The function returns the same
value for long and const
long.
- The amount of pointer indirection affects the result. For
example, double * is not equivalent to
double **.
- Two types defined with typedef are
equivalent if and only if their underlying types are equivalent.
- The enum type is a special case in that
two enum types are not considered equivalent.
EXAMPLES
The following example combines
__builtin_types_compatible_p()
and the
typeof(3) construct:
#define __COMPARE_TYPES(v, t) \
__builtin_types_compatible_p(__typeof__(v), t)
...
if (__COMPARE_TYPES(p, double) != 0)
err(EX_DATAERR, "invalid type");
SEE ALSO
gcc(1),
__builtin_constant_p(3),
typeof(3)
CAVEATS
This is a non-standard, compiler-specific extension.