cc23function-attributes

What's an implementation required to do upon seeing unknown attributes?


C2X has introduced "Attribute specifier sequence", which can be of these forms:

1) standard attribute, such as [[fallthrough]]
2) attribute with a namespace, such as [[gnu::unused]]
3) standard attribute with arguments, such as [[deprecated("reason")]]
4) attribute with both a namespace and an argument list, such as [[gnu::nonnull(1)]]

What happens when an implementation sees an attribute it doesn't recognize? Is it required to print an error, or ignore it, or print some diagnostic information?


Solution

  • The ISO C Standard explicitly states that any attribute token that is not supported by an implementation is ignored.

    From the latest draft, 6.7.13 Attributes:

    6.7.13.1 Introduction

    1 Attributes specify additional information for various source constructs such as types, objects, identifiers, or blocks. They are identified by an attribute token, which can either be a attribute prefixed token (for implementation-specific attributes) or a standard attribute specified by an identifier (for attributes specified in this document). 2 Support for any of the standard attributes specified in this document is implementation-defined and optional. For an attribute token (including an attribute prefixed token) not specified in this document, the behavior is implementation-defined. Any attribute token that is not supported by the implementation is ignored.