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