zHz00 Untitled

вторник, 18 апреля 2017
23:59 Опасность enum
enum -- что может быть лучше?

(для тех кто не в теме)

Чем же это опасно? При любом изменении списка, исключая добавление новых констант в конец, меняется фактическая нумерация! И значение, которое было раньше 2, теперь становится 3. Это совершенно некритично, если доступ к переменным завязан ТОЛЬКО на применении символических значений. Как только происходит выход за пределы данного лягушатника -- начинается беда-печаль. Вот примеры:
1. Бинарное общение с другой программой, у которой список констант немного отличается.
2. Общение самого с собой через файлы. Сохраняем, к примеру, настройки в файл. Обновляем программу, файл считывается, а значение уже не то!
3. Использование символических констант в качестве индексов предопределённых массивов. Например:

enum TypeName {SYMBOLIC_CONSTANT1, SYMBOLIC_CONSTANT2, SYMBOLIC_CONSTANT3};
char SymbolicNames[][80]={"Name1", "Name2", "Name3"};

printf("Name: %s\n",SymbolicNames[SYMBOLIC_CONSTANT2]);

Если модифицировать первый список, по индексам будут выпадать чужие имена.

Что с этим делать:
1. Не модифицировать список в середине и в начале. Никогда. (иногда может показаться, что это можно сделать безболезненно... переупорядочить константы по группам, к примеру)
2. Присваивать принудительные номера. Всегда. (как это делать, см. под катом в начале)
3. Использовать #define .

@темы: Программирование, Говнокод

URL
Да, если кто не знает ещё... В Краснодаре есть служба т...
Отпуск закончен - продолжаю работать. Вот думаю, взять ли...
Эту запись скушали злобные дайри... Видимо так тому и быт...
Меня уже затрахала эта реклама ширпотребной фирмы LG!.. ...
Вчера по дружбе полчаса по телефону(!):phone: правил русс...
Немного о междугородном транспорте. О поездах, точнее. ...

20.04.2017 в 18:50

20.04.2017 в 18:50
Резонно.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии