__BUILTIN_CONSTANT_P(3) | Library Functions Manual | __BUILTIN_CONSTANT_P(3)

# NAME

`__builtin_constant_p` —
GNU extension to determine compile time constants

# SYNOPSIS

int
`__builtin_constant_p`(value);

# DESCRIPTION

The `__builtin_constant_p`() is a GNU extension for determining whether a value is known to be constant at compile time. The function is closely related to the concept of “constant folding” used by modern optimizing compilers.

If the value is known to be a compile-time constant, a value 1 is returned. If `__builtin_constant_p`() returns 0, the value is not a compile-time constant in the sense that gcc(1) was unable to determine whether the value is constant or not.

# EXAMPLES

A typical example of the use of `__builtin_constant_p`() involves a situation where it may be desirable to fold the computation if it involves a constant, but a function call is needed otherwise. For instance, bswap16(3) is defined in NetBSD as:

    #define bswap16(x) \
            (__builtin_constant_p((x)) ? \
             __byte_swap_u16_constant(x) : __BYTE_SWAP_U16_VARIABLE(x))

# SEE ALSO

gcc(1), __builtin_object_size(3), __builtin_return_address(3)

# CAVEATS

This is a non-standard, compiler-specific extension.

December 19, 2010 | NetBSD 9.2