В C2X введена «последовательность спецификаторов атрибутов», которая может иметь следующие формы:
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)]]
Что происходит, когда реализация видит атрибут, который она не распознает? Требуется ли печатать ошибку, игнорировать ее или печатать какую-то диагностическую информацию?
В стандарте ISO C прямо указано, что любой токен атрибута, который не поддерживается реализацией, игнорируется.
Из последней версии , 6.7.13. Атрибуты:
6.7.13.1 Введение
1 Атрибуты определяют дополнительную информацию для различных исходных конструкций, таких как типы, объекты, идентификаторы или блоки. Они идентифицируются маркером атрибута, который может быть либо токен с префиксом атрибута (для атрибутов, специфичных для реализации) или стандартный атрибут, заданный идентификатором (для атрибутов указано в этом документе). 2 Поддержка любого стандарта атрибуты, указанные в этом документе, определяются реализацией и необязательный. Для маркера атрибута (включая атрибут с префиксом токен), не указанный в этом документе, поведение определяемый реализацией. Любой токен атрибута, который не поддерживается реализация игнорируется.