Неви́значена поведі́нка (англ. undefined behavior) — властивість деяких мов програмування (найпомітніша в Сі) залишати результат деяких операцій невизначеним конкретно. Ця міра приводить до спрощення специфікації і деякого підвищення гнучкості подібних мов (що часто характеризуються відсутністю вбудованої перевірки на межі масиву тощо).
Невизначену поведінку не слід плутати з неспецифікованою поведінкою (unspecified behavior), за якої специфікація дозволяє не будь-яку поведінку, а тільки обмежений діапазон варіантів реалізації.
Приклади
В мові Сі використання змінної до її ініціалізації призводить до невизначеної поведінки. Згідно зі специфікацією, компілятор повинен у цьому випадку зробити щось, що може здатися найефективнішим/простим. Невизначена поведінка виникає за спроби звернення до змінної.
Бібліотеки, для вищої швидкодії, можуть не перевіряти вказівників на 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++ пов'язана з тим, що згідно зі стандартами С і С++ побічні ефекти (тобто інкремент у цьому випадку) можуть бути застосованими в будь-який зручний для компілятора момент між двома точками перебігу.
Переваги
- Визначення деяких операцій як «невизначених» призводить подібні мови (що характеризуються найчастіше відсутністю вбудованої перевірки меж масиву тощо) до спрощення специфікації і деякого підвищення гнучкості.
- Прискорюється робота програм (оскільки не потрібно перевіряти різних «межових» випадків).
Недоліки
- Не гарантує повної сумісності різних реалізацій мови.
- Недопущення ситуацій невизначеної поведінки покладається на програміста.
Див. також
Примітки
- Н. Д. Любашенко (2019). ПРОГРАМУВАННЯ-2. Мова С. КОНСПЕКТ ЛЕКЦІЙ (PDF). К.: КПІ ім. Ігоря Сікорського. с. 101.
- A Pragmatic Decision | D-Mac's Stuff. оригіналу за 1 червня 2009. Процитовано 21 березня 2009.
Посилання
- Мобільність на рівні програмних текстів [ 11 жовтня 2006 у Wayback Machine.]
Ця стаття не містить . (червень 2011) |
![]() | Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Nevi znachena povedi nka angl undefined behavior vlastivist deyakih mov programuvannya najpomitnisha v Si zalishati rezultat deyakih operacij neviznachenim konkretno Cya mira privodit do sproshennya specifikaciyi i deyakogo pidvishennya gnuchkosti podibnih mov sho chasto harakterizuyutsya vidsutnistyu vbudovanoyi perevirki na mezhi masivu tosho Neviznachenu povedinku ne slid plutati z nespecifikovanoyu povedinkoyu unspecified behavior za yakoyi specifikaciya dozvolyaye ne bud yaku povedinku a tilki obmezhenij diapazon variantiv realizaciyi PrikladiV movi Si vikoristannya zminnoyi do yiyi inicializaciyi prizvodit do neviznachenoyi povedinki Zgidno zi specifikaciyeyu kompilyator povinen u comu vipadku zrobiti shos sho mozhe zdatisya najefektivnishim prostim Neviznachena povedinka vinikaye za sprobi zvernennya do zminnoyi Biblioteki dlya vishoyi shvidkodiyi mozhut ne pereviryati vkazivnikiv na NULL U procesorah x86 yaksho ye dva poslidovnih i treba zapisati informaciyu spochatku v odin port potim v inshij ce treba robiti po odnomu bajtu poryadok prihodu bajtiv na obladnannya ne garantuyetsya Prikladom neviznachenoyi povedinki ye nezvichajna povedinka z ANSI direktivoyu pragma Zgidno zi specifikaciyeyu movi kompilyatoram nadano povnu svobodu pid chas obrobki ciyeyi konstrukciyi Do versiyi 1 17 kompilyator GCC natrapivshi v kodi na cyu direktivu namagavsya zapustiti Emacs zi groyu Hanojski vezhi She odnim prikladom neviznachenoyi povedinki ye kod int i 5 i i i Pid chas jogo vikonannya zminna i mozhe nabuti znachennya 13 abo 14 dlya C C 13 dlya Java PHP i C 12 u realizaciyi na LISP Neviznachenist u movah C i C pov yazana z tim sho zgidno zi standartami S i S pobichni efekti tobto inkrement u comu vipadku mozhut buti zastosovanimi v bud yakij zruchnij dlya kompilyatora moment mizh dvoma tochkami perebigu PerevagiViznachennya deyakih operacij yak neviznachenih prizvodit podibni movi sho harakterizuyutsya najchastishe vidsutnistyu vbudovanoyi perevirki mezh masivu tosho do sproshennya specifikaciyi i deyakogo pidvishennya gnuchkosti Priskoryuyetsya robota program oskilki ne potribno pereviryati riznih mezhovih vipadkiv NedolikiNe garantuye povnoyi sumisnosti riznih realizacij movi Nedopushennya situacij neviznachenoyi povedinki pokladayetsya na programista Div takozhObrobka vinyatkiv Nespecifikovana povedinkaPrimitkiN D Lyubashenko 2019 PROGRAMUVANNYa 2 Mova S KONSPEKT LEKCIJ PDF K KPI im Igorya Sikorskogo s 101 A Pragmatic Decision D Mac s Stuff originalu za 1 chervnya 2009 Procitovano 21 bereznya 2009 PosilannyaMobilnist na rivni programnih tekstiv 11 zhovtnya 2006 u Wayback Machine Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno cherven 2011 Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi