Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

В C и C ++ [ править ]

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

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

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

AC прототип не принимает никаких аргументов, например , void f()выше, является устаревшим в C99 , [3] , однако.

В Haskell [ править ]

В отличие от C ++, в языке функционального программирования Haskell тип void обозначает пустой тип, не имеющий обитателей [1] . Функция с типом void не возвращает результатов, а программа с побочными эффектами с сигнатурой типа IO Void не завершается или не завершается. В частности, в тип 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 ++: примеры совместимости. Примиримые разногласия? Вы решаете , доктор Добб , 1 сентября 2002 года; версия для печати