Неви́значена поведі́нка () — властивість деяких мов програмування (найпомітніша в Сі) залишати результат деяких операцій невизначеним конкретно. Ця міра приводить до спрощення специфікації і деякого підвищення гнучкості подібних мов (що часто характеризуються відсутністю вбудованої перевірки на межі масиву тощо).
Невизначену поведінку не слід плутати з неспецифікованою поведінкою (), за якої специфікація дозволяє не будь-яку поведінку, а тільки обмежений діапазон варіантів реалізації.
Приклади В мові Сі використання змінної до її ініціалізації призводить до невизначеної поведінки. Згідно зі специфікацією, компілятор повинен у цьому випадку зробити щось, що може здатися найефективнішим/простим. Невизначена поведінка виникає за спроби звернення до змінної.
Бібліотеки, для вищої швидкодії, можуть не перевіряти вказівників на NULL.
У процесорах x86, якщо є два послідовних порти введення-виведення і треба записати інформацію спочатку в один порт, потім в інший, це треба робити по одному байту: порядок приходу байтів на обладнання не гарантується.
Прикладом невизначеної поведінки є незвичайна поведінка з ANSI-директивою «#pragma». Згідно зі специфікацією мови, компіляторам надано повну свободу під час обробки цієї конструкції. До версії 1.17 компілятор GCC, натрапивши в коді на цю директиву, намагався запустити Emacs зі грою «Ханойські вежі».
Ще одним прикладом невизначеної поведінки є код:int i = 5; i = ++i + ++i;Під час його виконання змінна i може набути значення 13 або 14 для C/C++, 13 для Java, PHP і C#, 12 у реалізації на LISP. Невизначеність у мовах C і C++ пов'язана з тим, що згідно зі стандартами С і С++ побічні ефекти (тобто інкремент у цьому випадку) можуть бути застосованими в будь-який зручний для компілятора момент між двома точками перебігу.
Переваги Визначення деяких операцій як «невизначених» призводить подібні мови (що характеризуються найчастіше відсутністю вбудованої перевірки меж масиву тощо) до спрощення специфікації і деякого підвищення гнучкості. Прискорюється робота програм (оскільки не потрібно перевіряти різних «межових» випадків).
Недоліки Не гарантує повної сумісності різних реалізацій мови. Недопущення ситуацій невизначеної поведінки покладається на програміста.
Див. також Обробка винятків Неспецифікована поведінка
Примітки
Посилання Мобільність на рівні програмних текстів