Manual browser: __builtin_types_compatible_p(3)
__BUILTIN_TYPES_COMPATIBLE_P(3) | Library Functions Manual | __BUILTIN_TYPES_COMPATIBLE_P(3) |
NAME
__builtin_types_compatible_p — GNU extension to check equivalent typesSYNOPSIS
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");
CAVEATS
This is a non-standard, compiler-specific extension.December 21, 2010 | NetBSD 7.0 |