Волшебное число

Волшебное число

Понятие «Магическое число» в программировании имеет два значения:

Содержание

Сигнатура данных

Магическое число, или сигнатура файла — целочисленная константа, используемая для однозначной идентификации ресурса или данных. Такое число само по себе не несёт никакого смысла, и может вызвать недоумение, встретившись в коде программы без соответсвующего контекста или комментария. По этой причине подобные числа были иронично названы магическими. В настоящее время это название прочно закрепилось как термин. Например, любой откомпилированный класс языка шестнадцатеричного «магического числа» 0xCAFEBABE. Второй широко известный пример — любой исполняемый файл ОС Microsoft Windows с расширением .exe начинается с последовательности байт 0x4D5A. Менее известным примером является неинициализированный указатель в Microsoft Visual С++ (начиная с 2005 версии Microsoft Visual Studio), который в режиме отладки имеет адрес 0xDEADBEEF.

Плохая практика программирования

Также «магическими числами» называют плохую практику программирования, когда в исходном тексте встречается числовое значение и неочевидно, что оно означает. Например, такой фрагмент будет плохим:

drawSprite(53, 320, 240);

Человеку, который не является автором программы, трудно сказать, что такое 53, 320 или 240. Но если этот код переписать, всё становится на свои места.

final int SCR_WIDTH = 640;
final int SCR_HEIGHT = 480;
final int SCR_X_CENTER = SCR_WIDTH/2;
final int SCR_Y_CENTER = SCR_HEIGHT/2;
final int SPRITE_CROSSHAIR = 53;
drawSprite(SPRITE_CROSSHAIR, SCR_X_CENTER, SCR_Y_CENTER);

Теперь понятно: данная строка выводит в центр экрана спрайт — перекрестие прицела. В большинстве языков программирования все значения, используемые для таких констант, будут вычислены ещё на этапе компиляции и подставлены в места использования значений. Поэтому такое изменение исходного текста не ухудшает быстродействие программы.

Магические числа и кроссплатформенность

Иногда магические числа вредят кроссплатформенности кода[1]. Дело в том, что в Си в 32- и 64-битных ОС гарантируется размер типов char, short и long long, в то время как размер int, long, size_t и ptrdiff_t может меняться (у первых двух — в зависимости от предпочтений разработчиков компилятора, в последних двух — в зависимости от разрядности целевой системы). В старом или неквалифицированно написанном коде могут встречаться «магические числа», означающие размер какого-либо типа — при переходе на машины с другой разрядностью они могут привести к трудноуловимым ошибкам.

Например:

size_t a[n];
memset(a, n*4, 0);                 // неправильно - подразумевается, что size_t равен 32 битам
memset(a, n*sizeof(size_t), 0);    // правильно!

Числа, которые не являются магическими

Не все числа требуется переносить в константы. Например, код на

for i:=0 to Count-1 do ...

Смысл чисел 0 и 1 понятен, и дальнейшего объяснения не требуется.

Также можно не делать константами:

Примечания


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Волшебное число" в других словарях:

  • Память — У этого термина существуют и другие значения, см. Память (значения). Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите …   Википедия

  • Воспоминание — Память  одна из психических функций и видов умственной деятельности, предназначенная сохранять, накапливать и воспроизводить информацию. Способности длительно хранить информацию о событиях внешнего мира и реакциях организма и многократно… …   Википедия

  • Память (биологическая) — Память  одна из психических функций и видов умственной деятельности, предназначенная сохранять, накапливать и воспроизводить информацию. Способности длительно хранить информацию о событиях внешнего мира и реакциях организма и многократно… …   Википедия

  • Память (психология) — Память  одна из психических функций и видов умственной деятельности, предназначенная сохранять, накапливать и воспроизводить информацию. Способности длительно хранить информацию о событиях внешнего мира и реакциях организма и многократно… …   Википедия

  • Память (человеческая) — Память  одна из психических функций и видов умственной деятельности, предназначенная сохранять, накапливать и воспроизводить информацию. Способности длительно хранить информацию о событиях внешнего мира и реакциях организма и многократно… …   Википедия

  • Клуб Винкс — Школа волшебниц Winx Club Тип Анимация …   Википедия

  • Белоснежка — У этого термина существуют и другие значения, см. Белоснежка (значения). Белоснежка …   Википедия

  • Клуб Винкс: Школа волшебниц — «Клуб Винкс: Школа волшебниц» «Winx Club» …   Википедия

  • Герои Меча и Магии IV: Заклинания — Заклинания в Героях Меча и Магии IV играют огромную роль в игровом процессе. Как и в предыдущих версиях игры, заклинания делятся между собой по школам. Общие сведенья В таблице приведены заклинания по их уровням и делению на школы: Магическая… …   Википедия

  • Мышиный дом — Дом Микки / Мышиный дом House of Mouse Жанр комедия Создатель Тони Крейг, Роберт Ганнавей Студия Walt Disney Television Animation …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»