Jump to content

Тип пустоты

Тип void в нескольких языках программирования , производных от C и Algol68 , является типом возвращаемого значения функции , которая обычно возвращает значение , но не передает значение результата вызывающей стороне. Обычно такие функции вызываются из-за их побочных эффектов , таких как выполнение какой-либо задачи или запись в их выходные параметры. Использование типа void в таком контексте сравнимо с процедурами в Паскале и синтаксическими конструкциями, определяющими подпрограммы в 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]

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

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

Синтаксис C для объявления (невариативной) функции с пока не указанным количеством параметров, например void f() выше, устарел в C99 . [3] В C23 (и C++) прототип функции с пустыми круглыми скобками объявляет функцию с нулевыми параметрами. [4] [5]

В Хаскеле [ править ]

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

Ссылки [ править ]

  1. ^ Ричи, Деннис М. (1993). « Развитие языка Си » . Association for Computing Machinery, Inc. через автора и Lucent Technologies Inc., 1996 г. Архивировано из оригинала 20 февраля 1998 г.
  2. ^ Страуструп, Бьярн (2009). Программирование: принципы и практика использования C++ . Бостон: Аддисон-Уэсли. п. 996. ИСБН  978-0-321-54372-1 .
  3. ^ Бьерн Страуструп, C и C++: практические примеры совместимости. Примиримые разногласия? Вам решать , Доктор Добб , 1 сентября 2002 г.; версия для печати
  4. ^ «WG14-N2432: Удалить поддержку определений функций с предложением списков идентификаторов» (PDF) . open-std.org . 25 сентября 2019 г. Архивировано (PDF) из оригинала 27 декабря 2022 г.
  5. ^ «WG14-N2841: Нет деклараторов функций без прототипов» . open-std.org . 10.10.2021. Архивировано из оригинала 12 ноября 2022 года.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e846f97b102ead261e540f6d4491ecde__1704822000
URL1:https://arc.ask3.ru/arc/aa/e8/de/e846f97b102ead261e540f6d4491ecde.html
Заголовок, (Title) документа по адресу, URL1:
Void type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)