Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Перечисления в Си

#c #enum


В чём основные отличия и плюсы использования перечисления в Си (enum) от обычной
инициализации переменных?
    


Ответы

Ответ 1



Основное отличие заключается в первую очередь в том, что элементы enum в языке С являются именованными константами и формируют константные выражения. Альтернативным способом введения именованных констант в языке С являются макросы #define. Других способов нет, и никакая "инициализация переменных" вам здесь не поможет. Вариант с #define, вследствие своей "макросовой" природы, является более гибким, ибо позволяет объявлять константы разных типов. enum позволяет объявлять константы только типа int (или некоего большего знакового целочисленного типа). С другой стороны, объявления enum, в отличие от макросов, подчиняются общим правилам области видимости языка, что может являться несомненным преимуществом. Для локальных целей можно объявить локальный enum. При использовании макросов "локальность" имен приходится эмулировать вручную путем явного применения #undef, что весьма неудобно.

Ответ 2



Перечисления позволяют из всего множества целых чисел выделить именованное подмножество целочисленных констант. То есть перечисления вводят в программу некую новую абстрактную сущность. Это средство классификации констант Сходу в голову приходит следующее.:) Во-первых, перечисления могут использоваться как константы при задании размерностей массивов. Например, enum { N = 10 }; int a[N] = { 0 }; Нельзя написать const int N = 10; int a[N] = { 0 }; Компилятор выдаст сообщение об ошибке, говорящее о том, что нельзя инициализировать массивы переменной длины. Во-вторых, перечисления можно использовать как выражения в метках case. Например, #include int main(void) { enum { Red, Green, Blue } e = Green; switch ( e ) { case Red: puts( "Red" ); break; case Green: puts( "Green" ); break; case Blue: puts( "Blue" ); break; } return 0; } В-третьих, использование типа перечисления в качестве типа параметра функции, является помимо лучшей читабельности еще и самодокументируемым. То есть становится ясно, с какими целочисленными значениями функция имеет дело.К тому же имена типов перечислений не конфликтуют с другими именами. Например, void draw( enum Color color );

Ответ 3



enum это удобные константы объединённые общей структурой. Вы можете конечно написать const int SUNDAY = 1; const int MONDAY = 2; Но enum'ы приятнее читать, код самодокументируется enum Weekday{Sunday, Monday};

Комментариев нет:

Отправить комментарий