Spec-Zone.ru › GCC 10 CPP

Следующее: __has_cpp_attribute, Предыдущее: Elif, Выше: Синтаксис условных выражений [Содержание][Индекс]

4.2.6 __has_attribute ¶

Специальный оператор __has_attribute (operand) может использоваться в выражениях ‘#if’ и ‘#elif’ для проверки, распознает ли GCC атрибут, на который ссылается его операнд. Использование оператора в других контекстах недопустимо. В коде C, операнд должен быть допустимым идентификатором. В коде C++, операнд может быть необязательно введён с помощью префикса attribute-scope::. Префикс attribute-scope определяет «пространство имён», в котором распознаётся атрибут. Область действия атрибутов GCC — ‘gnu’ или ‘__gnu__’. Оператор __has_attribute сам по себе, без операнда или скобок, действует как предопределённая макрос, так что его поддержку можно проверить в переносимом коде. Таким образом, рекомендуемое использование оператора таково:

#if defined __has_attribute
#  if __has_attribute (nonnull)
#    define ATTR_NONNULL __attribute__ ((nonnull))
#  endif
#endif

Первый тест ‘#if’ выполняется успешно только тогда, когда оператор поддерживается используемой версией GCC (или другим компилятором). Только при успешном выполнении этого теста можно использовать __has_attribute как оператор препроцессора. В результате, объединение двух тестов в одно выражение, как показано ниже, будет допустимо только с компилятором, поддерживающим оператор, но не с другими, которые его не поддерживают.

#if defined __has_attribute && __has_attribute (nonnull)   /* not portable */
…
#endif

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/cpp/_005f_005fhas_005fattribute.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API