- void
-
void — тип, спецификатор типа и ключевое слово в языках программирования Си, Си++, Java, C#,Objective-C, D и ActionScript.
Содержание
История
Среди современных языков программирования ключевое слово
void
впервые появилось в Си++ для поддержки концепции обобщенных указателей. Тем не менее, благодаря скорому заимствованию у Си++, первым нормативным документом, содержащим это ключевое слово, стал стандарт языка Си, опубликованный ANSI в 1989г. В рамках языка Си++void
был стандартизован в 1998г.Впоследствии ключевое слово
void
и связанные с ним языковые конструкции были унаследованы языками Java и C#, D.Синтаксис
Синтаксически,
void
является одним из спецификаторов типа, входящих в более общую группу спецификаторов объявления, но в некоторых языках программирования реализован в виде оператора. Например, в языке JavaScriptvoid
является оператором и всегда возвращаетundefined
:void expression === undefined;
Семантика
Семантика ключевого слова
void
не подчиняется общей семантике спецификаторов типа и зависит от способа употребления:- В качестве имени типа значения, возвращаемого функцией: указывает на то, что функция не возвращает значения, а вызов такой функции является void-выражением. Тело такой функции не должно содержать операторов return с выражениями. Например:
void f();
- В составе декларатора функции: указывает на то, что функция имеет прототип и не имеет параметров. Например:
int f(void);
- В качестве имени целевого типа операции приведения: такое void-приведение означает отказ от значения приводимого выражения. Например:
#define promote_ptr() ((void) (ptr++))
- В составе имени типа void-указателя: такой указатель способен представлять значения любых указателей на объектные и неполные типы, т.е. адреса любых объектов. Таким образом,
void
-указатель является обобщенным объектным указателем.void
-указатели не способны представлять значения указателей на функции. За исключением случая приведения константного null-указателя к указателю на функцию в Си, явных и неявных преобразований междуvoid
-указателями и указателями на функции нет.
Тип
void
определен как неполный тип, который не может быть дополнен. Как следствие, этот тип не должен быть использован там, где допускаются только полные типы, например, в качестве типа параметра в определении функции.Язык Си до введения void
До публикации первого стандарта Си в 1989г., которая ввела в язык ключевое слово
void
общепринятой практикой было объявлять функции, не возвращающие значений без использования спецификаторов типов. Хотя семантически такое объявление было эквивалентно объявлению функции, возвращающей значение типаint
, намеренно опущенные спецификаторы типа подчеркивали, что функция не возвращает никакого определенного значения. Например:f(long l) { /* ... */ }
Схожим образом, определения функций, не имеющие параметров записывались с пустыми круглыми скобками:
int main() { /* ... */ }
В качестве обобщенного указателя использовался указатель на char. Более того, современные стандарты требуют, чтобы представление и требования по выравниванию для
void
-указателей были теми же, что для указателей наchar
, что означает взаимозаменяемость этих типов.Первый стандартный диалект Си (C89), хотя уже позволял записи с ключевым словом
void
, все же допускал такое использование неявного int в целях поддержки совместимости с существующим кодом. Современный диалект Си (C99) не допускает отсутствия спецификаторов типов в именах типов и объявлениях.Примеры
Показаны примеры объявления функции, возвращающей void.
C++
void message()
Java
void message()
C#
void message()
C
void message(void)
Objective-C
-(void) message;
D
void message()
ActionScript
function message() : void
Примечания
Типы данных Неинтерпретируемые Числовые Целый • С фиксированной запятой • С плавающей запятой • Рациональный • Комплексный • Длинный • Интервальный
Текстовые Указатель Адрес • Ссылка
Композитные Алгебраический тип данных (обобщённый) • Массив • Ассоциативный массив • Класс • Список • Кортеж • Объект • Option type • Product • Структура • Множество • Объединение (tagged)
Другие Логический • Низший тип • Коллекция • Перечисляемый тип • Исключение • First-class function • Opaque data type • Recursive data type • Семафор • Поток • Высший тип • Type class • Unit type • Void
Связанные темы Абстрактный тип данных • Структура данных • Интерфейс • Kind (type theory) • Примитивный тип • Subtyping • Шаблоны C++ • Конструктор типа • Parametric polymorphism
Категории:- Типы данных
- Языки программирования
- Язык программирования Си
- Теория типов
- В качестве имени типа значения, возвращаемого функцией: указывает на то, что функция не возвращает значения, а вызов такой функции является void-выражением. Тело такой функции не должно содержать операторов return с выражениями. Например:
Wikimedia Foundation. 2010.