В C void
використовується для безлічі непов'язаних речей. Залежно від того, для чого він використовується, його значення може бути тип одиниці, порожній тип чи щось інше.
Коли void
використовується сам (на відміну від void*
вказівника на недійсність), це тип одиниці, тобто тип з єдиним значенням. Функції, які повертаються void
, кажуть, що "нічого не повертають", але те, що це насправді означає, це те, що вони не повертають жодної інформації. Вони повертають біт інформації, це означає, що вони повертають значення типу, що містить різних значень, тобто тип одиниці.2 0 = 1020= 1
Це не порожній тип: функція, яка повертає порожній тип, не може повернути значення, оскільки значення цього типу немає. Функція, тип повернення якої порожній, може циклічно фіксувати лише назавжди, або скасовувати програму, або підняти виняток ( longjmp
) (або іншим чином домовитись не повертатись, наприклад, перенести управління на інший потік або обробити, використовуючи функціонал, що перевищує стандартний C). Щоб не переплутати речі, звичайно в C використовувати void
замість порожнього типу (C не має порожнього типу).
Для цього void
типу потрібно біт пам’яті. Оскільки C наполягає на тому, що кожен об'єкт займає ціле, ненульове число байтів сховища, створювати об’єкт типу заборонено , а для повернення значення є спеціальний синтаксис ( вислів зі значенням опущеним). Немає синтаксису, який дає значення типу , але це значення є, коли функція, тип повернення якої є, повертається.0void
void
return
void
void
C не має нижнього типу в тому сенсі, що дозволяє будь-який можливий тип. Навіть неповні типи визначають загальний характер її значень, наприклад, покажчики або структури, об'єднання чи функції. Але void*
є вказівником на будь-який нефункціональний тип: це найменший елемент алгебри типів об’єктних вказівників, тобто тип нижнього об'єкта. На відміну від загального випадку, T*
коли T
є якийсь недійсний тип, void*
це не тип покажчиків на значення типу void
, а тип покажчиків на значення не визначеного типу.