Spec-Zone.ru › GCC 14

6.36 Атрибуты меток

GCC позволяет задавать атрибуты для меток C. Подробности о синтаксисе атрибутов см. в Синтаксисе атрибутов. Другие атрибуты доступны для функций (см. Объявление атрибутов функций), переменных (см. Указание атрибутов переменных), перечислителей (см. Атрибуты перечислителей), операторов (см. Атрибуты операторов) и для типов (см. Указание атрибутов типов). Атрибут метки, за которым следует объявление, относится к метке, а не к объявлению.

В этом примере используется атрибут метки cold для обозначения того, что ветвь ErrorHandling маловероятна, и что метка ErrorHandling не используется:

asm goto ("some asm" : : : : NoError);

/* This branch (the fall-through from the asm) is less commonly used */
ErrorHandling: 
   __attribute__((cold, unused)); /* Semi-colon is required here */
   printf("error\n");
   return 0;

NoError:
   printf("no error\n");
   return 1;
unused

Эта функция предназначена для кода, сгенерированного программой, который может содержать неиспользуемые метки, но который компилируется с -Wall. Обычно её не следует использовать в коде, написанном человеком, хотя она может быть полезна в случаях, когда код, переходящий по метке, находится внутри #ifdef условного оператора.

hot

Атрибут hot для метки используется для того, чтобы сообщить компилятору, что путь, следующий за меткой, более вероятен, чем пути, которые не помечены таким образом. Этот атрибут используется в случаях, когда __builtin_expect нельзя использовать, например, при вычислении перехода или asm goto.

cold

Атрибут cold для меток используется для того, чтобы сообщить компилятору, что путь, следующий за меткой, маловероятен для выполнения. Этот атрибут используется в случаях, когда __builtin_expect нельзя использовать, например, при вычислении перехода или asm goto.

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

Spec-Zone.ru

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