Какие целочисленные значения присваиваются серии перечислений без идентификаторов? - PullRequest
0 голосов
/ 18 февраля 2019

Часть кода, с которой я работал, имеет серию перечислений без идентификаторов.Насколько я понимаю, каждому перечислителю присваивается целочисленное значение в зависимости от его положения в списке перечисления.Первый перечислитель получает значение 0, следующий, 1 и так далее.

В приведенном ниже примере, какие целые числа будут назначены каждому перечислителю?Будет APPLE = 0, ORANGE = 1, BANANA = 2, GRAPE = 3 и т. Д.

enum {APPLE, ORANGE, BANANA};
enum {GRAPE, PEAR};
enum {PEACH, GRAPEFRUIT};

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

ÀPPLE, ORANGE и BANANA будут иметь значения 0,1 и 2. Затем они перезапускаются для GRAPE и PEAR.Это перезапущено снова.Итак, APPLE = GRAPE = PEACH = 0, ORANGE = PEAR = GRAPEFRUIT = 1 и BANANA = 2.

Из стандарта C11:

Идентификаторы в списке перечислителя объявлены какконстанты, имеющие тип int и могут появляться везде, где это разрешено.) Перечислитель с = определяет свою константу перечисления как значение выражения константы. Если первый перечислитель имеет no =, значение его константы перечисления равно 0. Каждый последующий перечислитель с no = определяет свою константу перечисления как значение константного выражения, полученного путем добавления 1 к значению предыдущей константы перечисления. (Использование перечислителей с = может привести к появлению констант перечисления со значениями, которые дублируют другие значения в том же перечислении.) Перечислители перечисления также известны как его члены.

https://port70.net/~nsz/c/c11/n1570.html#6.7.2.2p3

0 голосов
/ 18 февраля 2019

Каждое перечисление является отдельным и присваивает значение 0 первому элементу.Каждому последующему элементу в том же перечислении, разумеется, будет присвоено значение, превышающее предыдущее.

Таким образом, APPLE, GRAPE и PEACH имеют значение 0, ORANGE, PEAR и GRAPEFRUIT имеют значение 1, а BANANA имеет значение 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...