Spec-Zone.ru › GCC 15

6.12.8 Расширения объявлений типов enum

В стандартах C23 и C++11 был добавлен новый синтаксис для указания базового типа типа enum. Например,

enum pet : unsigned char { CAT, DOG, ROCK };

В GCC эта возможность также поддерживается в качестве расширения во всех более ранних диалектах C и C++. Для диалектов C++ до C++11 используйте -Wno-c++11-extensions, чтобы отключить соответствующие предупреждения.

Вы также можете предварительно объявить тип enum, не указывая его возможные значения. Перечислители задаются в последующем повторном объявлении типа, которое должно соответствовать базовому типу из первого объявления.

enum pet : unsigned char;
static enum pet my_pet;
...
enum pet : unsigned char { CAT, DOG, ROCK };

Предварительное объявление типов enum с явным указанием базового типа — это также возможность C++11, поддерживаемая GCC в качестве расширения для всех диалектов C. Однако она недоступна в диалектах C++ до C++11.

Стандарт C++ называет предварительное объявление типа enum с явным указанием базового типа непрозрачным типом. Он не считается неполным типом, поскольку его размер известен. Это означает, что до повторного объявления можно объявлять переменные или выделять память, используя этот тип, а не только использовать указатели на него.

Кроме того, GCC традиционно поддерживает предварительные объявления типов enum без явного указания базового типа. В результате получается неполный тип, примерно такой же, как если написать struct foo, не описывая элементы. Пока тип является неполным, нельзя объявлять переменные или выделять память, используя его. Однако можно работать с указателями на этот тип.

Предварительное объявление неполного типа enum без явного указания базового типа поддерживается в качестве расширения во всех диалектах GNU C, но совсем не поддерживается в GNU C++.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Enum-Extensions.html

Spec-Zone.ru

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