2016-10-28 8 views
1

Можно ли определить константы перечисления с массивами? Пример:Перечисления, определенные с помощью констант массива

enum myEnum 
{ 
    abc = {12, 34, 56}; 
    def = {-12, -13, -14}; 
}; 
+0

[Ideone says no] (http://ideone.com/nBaIDD) –

+0

Что бы это означало? Если вы скажете нам, что вы пытаетесь сделать, мы можем показать вам, как это сделать (используя что-то другое, кроме 'enum'). –

+0

Мне нужен способ хранения «кортежей» постоянной информации и возможности сравнить ее. В этом случае я использую типы данных и их размеры. Пример: long TYPE_NUMERIC_UNSIGNED_LONG_INT [] = {50, 0, 4294967295, 1}; – ColonelHedgehog

ответ

3

Это невозможно. Константа перечисления должна быть целым.

Из раздела 6.7.2.2 в C standard:

Выражение, которое определяет значение перечисления постоянной должно быть постоянным выражением целое число, которое имеет значение представимое как int

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

0

Номер

An перечисления содержит набор именованных целое число постоянных значений.

(C2011, 6.2.5/16)

Значения перечислений констант целого типа, выбранного реализации. Они не могут иметь тип реального типа, тип указателя или тип агрегата (включая тип массива). Значение (необязательное), объявленное для константы перечисления, должно быть целым числом.

 Смежные вопросы

  • Нет связанных вопросов^_^