void
является заполнителем, указывающим никаких объектов любого типа не ожидается.
Как спецификация аргумента функции
Исторически C использовал пустой список аргументов в объявлении функции ala return_type f();
, чтобы разрешить вызов f()
с любым количеством и аргументами любого типа, указанными на каждом сайте вызова, тогда как return_type f(void);
сделал его явным нет аргументы были ожидаемы или разрешены. То есть C был готов доверить программисту правильное определение количества и типов аргументов, при этом любая ошибка может повредить данные и / или привести к сбою программы.
как тип возвращаемого значения функции
В языке также могут быть некоторые неясности, если бы void
не было, чтобы установить общую последовательность «переменная типа | функция», которая является частью грамматики языка. Например:
f(); // declaration of a function that returns nothing?
// OR a function call?
Сравнение с другими типами
Это на самом деле не сам тип данных в том смысле, что он представляет собой некоторую интерпретацию области памяти, как это делают int, float, char и т. Д., Классы, объединения и т. Д.
указатели на аннулирование
Для void*
это указывает на потерю понимания содержимого памяти по содержащемуся адресу, так что когда-то перед разыменованием указателя он должен быть приведен к определенному типу, отражающему побитовое расположение данных по этому адресу памяти. Затем компилятор может интерпретировать эту битовую разметку и работать с ней в соответствии с известным тогда типом данных.