Пустой тип

редактировать

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

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

В C и C ++

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

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

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

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

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

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

В Haskell

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

Ссылки
Последняя правка сделана 2021-06-18 04:56:37
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте