void
void —тип,спецификатор типа иключевое слово в языках программированияС,C++,Java,C#,Objective-C,D,ActionScript иPHP.
История
[править |править код]Среди современных языков программирования ключевое словоvoid впервые появилось в C++ для поддержки концепцииобобщенных указателей. Тем не менее, благодаря скорому заимствованию у C++, первым нормативным документом, содержащим это ключевое слово, стал стандарт языка Си, опубликованныйANSI в 1989 г. В рамках языка C++void был стандартизован в 1998 г.
Впоследствии ключевое словоvoid и связанные с ним языковые конструкции были унаследованы языками Java и C#, D,PHP[1].
Синтаксис
[править |править код]Синтаксически,void является одним из спецификаторов типа, входящих в более общую группуспецификаторов объявления, но в некоторых языках программирования реализован в виде оператора. Например, в языкеJavaScriptvoid является оператором и всегда возвращаетundefined:
voidexpression===undefined;
Семантика
[править |править код]Семантика ключевого словаvoid не подчиняется общей семантике спецификаторов типа и зависит от способа употребления:
- В качествеимени типа значения, возвращаемого функцией: указывает на то, что функция не возвращает значения, а вызов такой функции являетсяvoid-выражением. Тело такой функции не должно содержать операторовreturn с выражениями. Например:
voidf();
- В составедекларатора функции: указывает на то, что функция имеетпрототип и не имеет параметров. Например:
intf(void);
- В качестве имени целевого типа операции приведения: такоеvoid-приведение означает отказ от значения приводимого выражения. Например:
#define promote_ptr() ((void) (ptr++)) - В составе имени типаvoid-указателя: такой указатель способен представлять значения любых указателей наобъектные инеполные типы, то есть адреса любыхобъектов. Таким образом,
void-указатель является обобщеннымобъектным указателем.void-указатели не способны представлять значенияуказателей на функции. За исключением случая приведенияконстантного null-указателя к указателю на функцию в Си, явных инеявных преобразований междуvoid-указателями и указателями на функции нет.
Типvoid определен как неполный тип, который не может быть дополнен. Как следствие, этот тип не должен быть использован там, где допускаются только полные типы, например, в качестве типапараметра вопределении функции.
Язык С до введения void
[править |править код]До публикации первого стандарта Си в 1989 г., которая ввела в язык ключевое словоvoid, общепринятой практикой было объявлять функции, не возвращающие значений без использования спецификаторов типов. Хотя семантически такое объявление было эквивалентно объявлению функции, возвращающей значение типаint, намеренно опущенные спецификаторы типа подчеркивали, что функция не возвращает никакого определенного значения. Например:
f(longl){/* ... */}
Схожим образом, определения функций, не имеющие параметров записывались с пустыми круглыми скобками:
intmain(){/* ... */}
В качестве обобщенного указателя использовалсяуказатель на char. Более того, современные стандарты требуют, чтобыпредставление и требования повыравниванию дляvoid-указателей были теми же, что для указателей наchar, что означаетвзаимозаменяемость этих типов.
Первый стандартный диалект Си (C89), хотя уже позволял записи с ключевым словомvoid, все же допускал такое использование неявного int в целях поддержки совместимости с существующим кодом. Современный диалект Си (C99) не допускает отсутствия спецификаторов типов в именах типов и объявлениях.
Примеры
[править |править код]Показаны примеры объявления функции, возвращающей void.
C++
[править |править код]voidmessage()
Java
[править |править код]voidmessage()
C#
[править |править код]voidmessage()
C
[править |править код]voidshart(chars[],intc);
Objective-C
[править |править код]-(void)message;
D
[править |править код]voidmessage()
ActionScript
[править |править код]functionmessage():void
PHP (> 7.0)
[править |править код]functionmessage():void
Basic
[править |править код]Submessage()
Примечания
[править |править код]- ↑[1]Архивная копия от 4 декабря 2016 наWayback MachineНовость о появлении нового типа от разработчиков языка PHP