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
Подруга не звонила месяц. А я забыла поздравить ее с днем...
сегодня случился мини-шок. Нет, я, конечно, не всезнайка,...
Оба-на! Нашёл свой плеер! Я его уже полгода не видел....
"Во время кризиса самое главное - не потерять голову...
Комп вылетел и перезагрузился, и я дал скандиску проверит...
Спать пора, уснул бычок... Current music: Paradise L...

20.04.2017 в 18:50

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

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

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