Неопределенное поведение

Неопределенное поведение

Неопределённое поведение (англ. Undefined behaviour) — свойство некоторых языков программирования (наиболее заметно в C) в определённых маргинальных ситуациях выдавать результат, зависящий от реализации компилятора. Другими словами, спецификация не определяет поведение языка в любых возможных ситуациях, а говорит: «при условии А результат операции Б не определён». Допускать такую ситуацию в программе считается ошибкой; даже если на некотором компиляторе программа успешно выполняется, она не будет кроссплатформенной и может отказать на другой машине, в другой ОС и даже на других настройках компилятора.

Содержание

Примеры

В языке Си, к примеру, использование переменной до её инициализации приводит к неопределённому поведению. Согласно спецификации компилятор должен в этом случае сделать что-либо, что может показаться наиболее эффективным/простым. Неопределённое поведение возникает при попытке обращения к переменной.

Ещё один пример неопределенного поведения: курьёз с ANSI-директивой «#pragma». Согласно спецификации языка компиляторам предоставлена полная свобода при обработке этой конструкции. До версии 1.17 компилятор GCC при нахождении в исходном коде этой директивы пытался запустить Emacs с игрой «Ханойские башни».

Достоинства

  • Определение некоторых операций как «неопределённых» приводит подобные языки (характеризующиеся зачастую отсутствием встроенной проверки на предел массива и т. д.) к упрощению спецификации, и некоторому увеличению гибкости.
  • Ускоряется работа программ (так как не нужно проверять всевозможные «маргинальные» случаи).

Недостатки

  • Не гарантирует полной совместимости различных реализаций языка.
  • Недопущение ситуаций неопределённого поведения остаётся за программистом.

Ссылки



Wikimedia Foundation. 2010.

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

Полезное


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

  • Неопределённое поведение — Не следует путать с неуточняемым поведением. Неопределённое поведение (англ. undefined behaviour)  свойство некоторых языков программирования (наиболее заметно в Си), программных библиотек и аппаратного обеспечения в определённых… …   Википедия

  • Vector (C++) — Стандартная библиотека языка программирования C++ fstream iomanip ios iostream sstream Стандартная библиотека шаблонов algorithm …   Википедия

  • ctype.h — Стандартная библиотека языка программирования С assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stdbool.h stddef.h …   Википедия

  • Ctype.h — Стандартная библиотека языка программирования С assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stdbool.h stddef.h stdint.h stdio.h …   Википедия

  • Ссылка (C++) — В языке программирования C++ ссылка это простой ссылочный тип, менее мощный, но более безопасный, чем указатель, унаследованый от языка Си. Название C++ ссылка может приводить к путанице, так как в информатике под ссылкой понимается обобщенный… …   Википедия

  • Пушкин, Александр Сергеевич — — родился 26 мая 1799 г. в Москве, на Немецкой улице в доме Скворцова; умер 29 января 1837 г. в Петербурге. Со стороны отца Пушкин принадлежал к старинному дворянскому роду, происходившему, по сказанию родословных, от выходца "из… …   Большая биографическая энциклопедия

  • Большая восьмёрка — это группа восьми промышленно развитых стран, проводящая регулярные встречи на высшем уровне. Саммит большой восьмёрки в который входят страны: Великобритания, Франция, Италия, ФРГ, Япония, США, Канада, а также Россия. Содержание >>>>>>>>>>> …   Энциклопедия инвестора

  • Сперанский, граф Михаил Михайлович — — государственный деятель времен Александра ? и Николая I (1772—1839 г.). I. Сперанский родился 1 января 1772 г. в селе Черкутине, Владимирского уезда, где отец его, Михаил Васильевич, был священником. Семи лет отдан был отцом во… …   Большая биографическая энциклопедия

  • САРТР —         (Sartre) Жан Поль (1905 1980) франц. писатель, философ, критик, обществ, деятель. Окончил в 1929 Высшую нормальную школу в Париже, в 1933 34 изучал нем. философию, стажируясь при Франц. ин те в Берлине. Преподаватель философии. Первые… …   Энциклопедия культурологии

  • ДЕЙСТВИЕ СОЦИАЛЬНОЕ — простейшая единица соц. деятельности; понятие, введенное в научн. оборот М. Вебером для обозначения действия индивида, сознательно ориентированного на прошедшее, настоящее или будущее поведение др. людей, причем, под другими понимаются как… …   Российская социологическая энциклопедия


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

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