Void
void
— спеціальний тип результату функцій, який позначає що функція нічого не повертає. Застосовується в мовах програмування, похідних від C або Algol68.
Зазвичай такі функції застосовуються заради їхніх побічних ефектів, таких як виконання якогось завдання або запис у вихідні параметри. Використання типу void
у такому контексті можна порівняти з процедурами у мові Pascal або підпрограмами у Fortran, BASIC. Тип void
подібний до одиничного типу[en], що використовується у функційних мовах програмування та в теорії типів.
Мови C та C++ також підтримують вказівник на тип void
(визначається як void *
), але це не пов'язане поняття. Змінні цього типу є вказівниками на дані невизначеного типу, тому в цьому контексті (але не в інших) void *
діє приблизно як універсальний або верхній тип. Програма, ймовірно, може перетворити вказівник на будь-який тип даних (крім вказівника функції) у вказівник на void
і назад до початкового типу, не втративши інформації, що робить ці вказівники корисними для поліморфних функцій. Стандарт мови C не гарантує, що різні типи вказівників мають однаковий розмір або вирівнювання.
Застосування в С та С++
Функція з типом результату void
закінчується або досягненням кінця функції, або виконанням оператора return
без поверненого значення. Тип void
можна також використати як єдиний аргумент прототипу функції, що вказує на те, що функція не приймає аргументів.
Важливо, що, попри назву, у всіх цих ситуаціях тип void
є одиничним типом, а не нульовим або нижнім типом (який іноді помилково називають «тип void
»), хоча, на відміну від реального одиничного типу, який є атомарним, тип void
не має способу представити значення, а мова не надає жодного способу оголосити об'єкт або представити значення з типом void
.
В ранніх версіях C функції без конкретного результату за замовчуванням повертали тип void
, а функції без аргументів просто мали порожні списки аргументів. Вказівники на не типізовані дані оголошувались як цілі числа або вказівники на символи. Деякі ранні компілятори C мали функцію, яка генерувала попередження про будь-який виклик функції, який не використовував повернуте значення функції. Старий код іноді передає такі виклики функції як void
для придушення цього попередження. У 1979—1980 рр., коли Б'ярн Страуструп розпочав свою роботу над C++, void
та вказівники void
були частиною діалекту мови С, підтримуваного AT&T сумісними компіляторами.[1]
Явне використання void
замість надання аргументів у прототипі функції має різну семантику в C та C++. Порівняння наведено в таблиці:[2]
C | C++ еквівалент |
---|---|
void f(void); | void f(); кращеvoid f(void); |
void f(); приймає постійну, але невідому кількість аргументів | template <typename... Ts> void f(Ts... ts) {} не повністю рівнозначно |
Прототипи в С без аргументів, наприклад void f()
не рекомендуються до використання, починаючи з C99.[3]
Застосування в Haskell
На відміну від C++, у функціональній мові програмування Haskell тип void
позначає порожній тип, який не існує й не може мати значень.[4] Функція типу void
не повертає результатів, а програма з побічним ефектом із типом IO Void
не завершує роботу або зазнає аварійного завершення. Зокрема, немає загальних (total) функцій типу void
.
Примітки
- ↑ http://cm.bell-labs.com/cm/cs/who/dmr/chist.html [Архівовано 2015-03-28 у Wayback Machine.], «Standardisation.»
- ↑ Stroustrup, Bjarne (2009). Programming: Principles and Practice Using C++. Boston: Addison-Wesley. с. 996. ISBN 0-321-54372-6.
- ↑ Bjarne Stroustrup, C and C++: Case Studies in Compatibility. Reconcilable differences? You decide [Архівовано 1 травня 2009 у Wayback Machine.], Dr. Dobb's[en], 1 вересня 2002; print version [Архівовано 10 серпня 2011 у Wayback Machine.]
- ↑ A Haskell 98 logically uninhabited data type. Архів оригіналу за 22 січня 2021. Процитовано 31 січня 2021.
- п
- о
- р
- Десятковий
- Довільної точності або велике число
- З нерухомою комою
- З рухомою комою
- зниженої точності
- половинної точності
- bfloat16[en]
- minifloat[en]
- одинарної
- подвійної
- четверної[en]
- вісімкової[en]
- розширеної[en] точності
- довге подвійної точності[en]
- зниженої точності
- Інтервальний
- Комплексний[en]
- Раціональний[en]
- Цілочисельний
- Адреса
- фізична
- віртуальна[en]
- Посилання
- Символьний
- Рядковий
- Алгебричний
- Асоціативний масив
- Залежний
- Запис або структура
- Індукційний[en]
- Інтуїціоністський
- Клас
- Кортеж
- Масив
- Множина
- Об'єднання
- тип-сума[en]
- Об'єкт
- метаоб'єкт[en]
- Список
- Тип-добуток
- Тип-опція[en]
- Тип-перетин[en]
- Тип-уточнення[en]
- Верхній
- Виняток
- Клас типів[en]
- Контейнер
- Логічний
- Непрозорий
- Нижній[en]
- Одиничний[en]
- Перелічуваний
- Порожній
- Потік
- Рекурсивний
- Семафор
- Функційний
- void
- Абстрактний тип даних
- Змінна
- Інтерфейс
- Каламбур типізації
- Конструктор типу
- Лямбда-куб
- Монада
- Пакування[en]
- Параметричний поліморфізм[en]
- Підтипізація[en]
- Приведення типів
- Примітивний тип даних
- Рід[en]
- метаклас[en]
- Система типізації
- Система F
- Структура даних
- Теорія типів
- Узагальнення
- Числення конструкцій