You copied the Doc URL to your clipboard.

Function attributes

The __attribute__ keyword enables you to specify special attributes of variables or structure fields, functions, and types. The keyword format is either of the following:

__attribute__((attribute1, attribute2, ...))
__attribute__((__attribute1__, __attribute2__, ...))

For example:

void * Function_Attributes_malloc_0(int b) __attribute__((malloc));
static int b __attribute__((__unused__));

Table 10 summarizes the available function attributes.

Table 10. Function attributes that the compiler supports, and their equivalents
Function attributeNon-attribute equivalent
__attribute__((alias))-
__attribute__((always_inline))__forceinline
__attribute__((const))__pure
__attribute__((constructor[(priority)]))-
__attribute__((deprecated))-
__attribute__((destructor[(priority)]))-
__attribute__((format_arg(string-index)))-
__attribute__((malloc))-
__attribute__((noinline))__declspec(noinline)
__attribute__((no_instrument_function))-
__attribute__((nomerge))-
__attribute__((nonnull))-
__attribute__((noreturn))__declspec(noreturn))
__attribute__((notailcall))-
__attribute__((pcs("calling_convention")))-
__attribute__((pure))-
__attribute__((section("name")))-
__attribute__((unused))-
__attribute__((used))-
__attribute__((visibility("visibility_type")))-
__attribute__((weak))__weak
__attribute__((weakref("target")))-

Usage

You can set these function attributes in the declaration, the definition, or both. For example:

void AddGlobals(void) __attribute__((always_inline));
__attribute__((always_inline)) void AddGlobals(void) {...}

When function attributes conflict, the compiler uses the safer or stronger one. For example, __attribute__((used)) is safer than __attribute__((unused)), and __attribute__((noinline)) is safer than __attribute__((always_inline)).

Was this page helpful? Yes No