6.38 Атрибуты операторов
GCC позволяет задавать атрибуты для пустых операторов. Подробнее о синтаксисе атрибутов см. в разделе Синтаксис атрибутов. Другие атрибуты доступны для функций (см. Объявление атрибутов функций), переменных (см. Указание атрибутов переменных), меток (см. Атрибуты меток), перечислителей (см. Атрибуты перечислителей) и типов (см. Указание атрибутов типов).
-
fallthrough -
Атрибут
fallthroughс пустым оператором служит оператором пропуска. Он указывает компилятору, что оператор, который переходит к другой метке case или пользовательской метке в операторе switch, является преднамеренным, и поэтому предупреждение -Wimplicit-fallthrough не должно срабатывать. Атрибут fallthrough может появиться не более одного раза в каждом списке атрибутов и не может быть смешан с другими атрибутами. Он может использоваться только в операторе switch (в противном случае компилятор выдаст ошибку), после предшествующего оператора и перед логически последующей меткой case или пользовательской меткой.В этом примере используется атрибут оператора
fallthroughдля указания, что предупреждение -Wimplicit-fallthrough не должно генерироваться:switch (cond) { case 1: bar (1); __attribute__((fallthrough)); case 2: … } -
assume -
Атрибут
assumeс пустым оператором служит для обеспечения портативности предположения. Он должен иметь единственный аргумент — условное выражение, которое не вычисляется. Если бы аргумент вычислялся в истинное значение в той точке, где он появляется, он не оказывает никакого влияния; в противном случае поведение не определено. Это вариант GNU стандарта ISO C++23assumeатрибут, но он может использоваться в любой версии как C, так и C++.int foo (int x, int y) { __attribute__((assume(x == 42))); __attribute__((assume(++y == 43))); return x + y; }yфактически не увеличивается, и компилятор может, но не обязан, оптимизировать его до простогоreturn 42 + 42;.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Statement-Attributes.html