Неспецифіко́вана поведі́нка () або поведі́нка, що визнача́ється реаліза́цією () — поведінка комп'ютерної програми, яка може відрізнятися на різних платформах і компіляторах, оскільки специфікація мови програмування пропонує кілька допустимих варіантів реалізації якоїсь мовної конструкції. На відміну від невизначеної поведінки, програма з неспецифікованою поведінкою з точки зору відповідності специфікації мови не вважається помилковою; за неспецифікованої поведінки, специфікація зазвичай обмежує можливі варіанти поведінки, хоча й не зводить їх до єдиного припустимого.

Термінологія Відповідно до стандарту мови C99, 3.4.1. поведінка, визначена реалізацією () — неспецифікована поведінка, вибір якої документується окремо в кожній реалізації; 3.4.3. неспецифікована поведінка () — використання неспецифікованого значення або інша поведінка, де цей Міжнародний стандарт надає два або більше варіантів і не накладає жодних інших вимог на вибір у кожному конкретному випадку. Згідно зі стандартом мови C++,

1.3.5. поведінка, визначена реалізацією () — поведінка правильно побудованої програмної конструкції з правильними даними, що залежить від реалізації і яка має бути документована кожною реалізацією; 1.3.13. неспецифікована поведінка () — поведінка правильно побудованої програмної конструкції з правильними даними, що залежить від реалізації. Реалізація має документувати вибір поведінки. [Примітка: як правило, діапазон допустимих поведінок зазначено в цьому Міжнародному стандарті.]

Приклади У Сі і C++ (на відміну мови Java) порядок обчислення параметрів функції є неспецифікованим; отже, в програмі, наведеній нижче, порядок, у якому будуть надруковані рядки «F» та «G», залежить від компілятора.

#include <iostream> int f() { std::cout << "In f\n"; return 3; }

int g() { std::cout << "In g\n"; return 4; }

int sum(int i, int j) { return i + j; }

int main() { return sum(f(), g()); }

Класичним прикладом поведінки, що визначається реалізацією (неспецифікованої поведінки, яка має документуватися реалізацією), є розмір типів даних; наприклад long у різних компіляторах та операційних системах може мати розмір 32 або 64 біт. Програма, яка передбачає, що в один long завжди поміститься вказівник, некоректно працюватиме на деяких платформах (наприклад, у Windows x64).

Див. також Багатоплатформність

Примітки

Посилання RSDN FAQ: Яка між ними різниця (unspecified та undefined)? Мобільність на рівні вихідних текстів