Невизначена поведінкаНеви́значена поведі́нка[1] (англ. undefined behavior) — властивість деяких мов програмування (найпомітніша в Сі) залишати результат деяких операцій невизначеним конкретно. Ця міра приводить до спрощення специфікації і деякого підвищення гнучкості подібних мов (що часто характеризуються відсутністю вбудованої перевірки на межі масиву тощо). Невизначену поведінку не слід плутати з неспецифікованою поведінкою[1] (unspecified behavior), за якої специфікація дозволяє не будь-яку поведінку, а тільки обмежений діапазон варіантів реалізації. ПрикладиВ мові Сі використання змінної до її ініціалізації призводить до невизначеної поведінки. Згідно зі специфікацією, компілятор повинен у цьому випадку зробити щось, що може здатися найефективнішим/простим. Невизначена поведінка виникає за спроби звернення до змінної. Бібліотеки, для вищої швидкодії, можуть не перевіряти вказівників на NULL. У процесорах x86, якщо є два послідовних порти введення-виведення і треба записати інформацію спочатку в один порт, потім в інший, це треба робити по одному байту: порядок приходу байтів на обладнання не гарантується. Прикладом невизначеної поведінки є незвичайна поведінка з ANSI-директивою «#pragma». Згідно зі специфікацією мови, компіляторам надано повну свободу під час обробки цієї конструкції. До версії 1.17 компілятор GCC, натрапивши в коді на цю директиву, намагався запустити Emacs зі грою «Ханойські вежі».[2] Ще одним прикладом невизначеної поведінки є код: int i = 5;
i = ++i + ++i;
Під час його виконання змінна Переваги
Недоліки
Див. такожПримітки
Посилання
|
Portal di Ensiklopedia Dunia