Spec-Zone.ru › GCC 4

7.7 Атрибуты переменных, функций и типов в C++

Некоторые атрибуты имеют смысл только для программ на C++.

abi_tag ("tag", ...)
Атрибут abi_tag может быть применён к объявлению функции или класса. Он изменяет замысловатое имя функции или класса, чтобы включить имя тега, для того, чтобы отличить функцию или класс от предыдущей версии с другим ABI; возможно, класс изменил свой размер, или функция имеет другой тип возвращаемого значения, который не закодирован в замысловатом имени.

Аргумент может быть списком строк произвольной длины. Строки сортируются на выходе, поэтому порядок списка не важен.

Повторное объявление функции или класса не должно добавлять новые теги ABI, так как это изменит замысловатое имя.

Теги ABI применяются к имени, поэтому все экземпляры и специализации шаблона имеют одинаковые теги. Атрибут будет проигнорирован, если он применён к явной специализации или экземпляру.

Флаг -Wabi-tag включает предупреждение о классе, у которого нет всех тегов ABI, используемых его подобъектами и виртуальными функциями; для пользователей с кодом, который должен сосуществовать с более ранним ABI, использование этого параметра может помочь найти все затронутые типы, которые нужно пометить.

init_priority (priority)

В Стандартном C++, объекты, определённые на уровне пространства имён, гарантированно инициализируются в строгом соответствии с порядком их определений в данном файле трансляции. Никаких гарантий не даётся для инициализации между файлами трансляции. Однако GNU C++ позволяет пользователям управлять порядком инициализации объектов, определённых на уровне пространства имён, с помощью атрибута init_priority, указывая относительный priority, константное целочисленное выражение, в настоящее время ограниченное значениями от 101 до 65535 включительно. Более низкие числа означают более высокий приоритет.

В следующем примере, A обычно создаётся до B, но атрибут init_priority меняет этот порядок:

Some_Class  A  __attribute__ ((init_priority (2000)));
Some_Class  B  __attribute__ ((init_priority (543)));

Обратите внимание, что конкретные значения priority не важны; важен только их относительный порядок.

java_interface
Этот атрибут типа информирует C++, что класс является интерфейсом Java. Он может быть применён только к классам, объявленным внутри extern "Java" блока. Вызовы методов, объявленных в этом интерфейсе, обрабатываются с помощью механизма таблицы интерфейсов GCJ вместо обычной обработки по виртуальной таблице.
warn_unused
Для типов C++ с нетривиальными конструкторами и/или деструкторами компилятор не может определить, действительно ли переменная этого типа не используется, если на неё не ссылаются. Этот атрибут типа сообщает компилятору, что о переменных этого типа следует предупреждать, если они, похоже, не используются, как и о переменных фундаментальных типов.

Этот атрибут подходит для типов, которые просто представляют значение, такие как std::string; он не подходит для типов, которые управляют ресурсами, такими как std::mutex.

Этот атрибут также принимается в C, но он не нужен, потому что в C нет конструкторов или деструкторов.

См. также Ассоциацию пространств имён.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/C_002b_002b-Attributes.html

Spec-Zone.ru

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