@c attribute module documentation @c Copyright 2020--2023 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @node Attributes @section Attributes @cindex Attributes @findex __attribute__ This module provides a header file @file{attribute.h} that defines macros related to C and C++ attributes and the GCC @code{__attribute__} keyword. Here is an example of its use: @example #include NODISCARD extern char *crypt (char const *, char const *) ATTRIBUTE_NOTHROW ATTRIBUTE_LEAF ATTRIBUTE_NONNULL ((1, 2)); @end example @noindent @code{NODISCARD} expands to @code{[[nodiscard]]} if the compiler supports this C23 syntax, otherwise to @code{__attribute__ ((__warn_unused_result__))} if the compiler is a recent-enough GCC or GCC-like compiler, otherwise to nothing. @code{ATTRIBUTE_NOTHROW} expands to @code{__attribute__ ((__nothrow__))} if the compiler is a recent-enough GCC or GCC-like compiler, and to nothing otherwise. Similarly for @code{ATTRIBUTE_LEAF}. @code{ATTRIBUTE_NONNULL ((1, 2))} expands to @code{__attribute__ ((__nonnull__ (1, 2)))} if the compiler is recent-enough GCC, and to nothing otherwise. Most of these attribute names begin with @code{ATTRIBUTE_}. A few do not, because they are part of C23 and their names are not likely to clash with other macro names. These macros are @code{DEPRECATED}, @code{FALLTHROUGH}, @code{MAYBE_UNUSED}, and @code{NODISCARD}, which can be defined to @code{[[deprecated]]} etc.@: on C23 platforms. Also, these exceptional macros should be placed at the start of function declarations, whereas the @code{ATTRIBUTE_*} macros can be placed at the end.