Тип пустоты - Void type

В тип пустоты, в нескольких языки программирования, производные от C и Algol68, это тип за результат функция который возвращается нормально, но не предоставляет значение результата вызывающей стороне. Обычно такие функции вызываются по их побочные эффекты, например, выполнение некоторой задачи или запись в их выходные параметры. Использование типа void в таком контексте сравнимо с процедуры в Паскаль и синтаксические конструкции, определяющие подпрограммы в Visual Basic. Он также похож на тип единицы используется в функциональные языки программирования и теория типов. Видеть Тип устройства # В языках программирования для сравнения.

C и C ++ также поддерживают указатель на тип void (указано как пустота *), но это не связанное с этим понятие. Переменные этого типа указатели к данным неопределенные type, поэтому в этом контексте (но не в других) пустота * действует примерно как универсальный или верхний тип. Программа, вероятно, может преобразовать указатель на любой тип данных (кроме указатель на функцию ) на указатель на void и обратно к исходному типу без потери информации, что делает эти указатели полезными для полиморфный функции. Стандарт языка C не гарантирует, что разные типы указателей имеют одинаковый размер.

В C и C ++

Функция с типом результата void завершается либо достижением конца функции, либо выполнением заявление о возврате без возвращаемого значения. Тип void также может отображаться как единственный аргумент из прототип функции чтобы указать, что функция не принимает аргументов. Обратите внимание, что, несмотря на название, во всех этих ситуациях тип void служит тип единицы, а не как ноль или нижний тип (который иногда ошибочно называют «типом void»), хотя в отличие от реального типа единицы, который является синглтоном, тип void не имеет способа представления своего значения, а язык не предоставляет никакого способа объявить объект или представить значение с типом пустота.

В самых ранних версиях C функции без определенного результата по умолчанию возвращали тип int а функции без аргументов просто имели пустые списки аргументов. Указатели на нетипизированные данные были объявлены как целые числа или указатели на char. Некоторые ранние C компиляторы имел возможность, которая теперь воспринимается как раздражение, генерировать предупреждение при любом вызове функции, который не использовал возвращаемое значение функции. Иногда старый код бросает такие функции вызывают void, чтобы подавить это предупреждение. К тому времени Бьярне Страуструп начал свою работу над C ++ в 1979–1980 гг. указатели void и void были частью диалекта языка C, поддерживаемого компиляторами, производными от AT&T.[1]

Явное использование void или отсутствие аргументов в прототип функции имеет разную семантику в C и C ++, как показано в следующей таблице:[2]

CЭквивалент C ++
void f (недействительно);void f (); (предпочтительный)
void f (недействительно);
void f (); (принимает постоянное, но неизвестное количество аргументов)template void f (Ts ... ts) {}

(не строго эквивалентно)

Прототип C без аргументов, например void f () выше, устарела в C99,[3] Однако.

В Haskell

В отличие от C ++, в функциональный язык программирования Haskell тип void обозначает пустой тип, у которого нет жителей [1]. Функция с типом void не возвращает результатов, а побочная программа с сигнатурой типа IO Void не завершается или вылетает. В частности, нет общие функции в пустотный тип.

Рекомендации

  1. ^ http://cm.bell-labs.com/cm/cs/who/dmr/chist.html, «Стандартизация».
  2. ^ Страуструп, Бьярн (2009). Программирование: принципы и практика использования C ++. Бостон: Эддисон-Уэсли. п. 996. ISBN  0-321-54372-6.
  3. ^ Бьярне Страуструп, C и C ++: примеры совместимости. Примиримые разногласия? Вам решать, Доктора Добба, 01 сентября 2002 г .; версия для печати