Да, void
это тип.Тип data зависит от того, как вы определяете этот термин;стандарт С не делает.
Стандарт определяет термин «тип объекта».В С99 и ранее;void
не тип объекта;в С11 это так.Во всех версиях стандарта void
является неполным типом .В C11 изменилось то, что неполные типы теперь являются подмножеством типов объектов;это просто изменение терминологии.(Другой тип - это тип функции .)
C99 6.2.6, параграф 19 гласит:
void содержит пустой набор значений;это неполный тип, который не может быть завершен.
Стандарт C11 слегка меняет формулировку:
Тип void содержит пустой наборценности;это неполный тип объекта, который не может быть завершен.
Это отражает изменение C11 в определении «типа объекта» для включения неполных типов;это на самом деле ничего не меняет в природе типа void
.
Ключевое слово void
может также использоваться в некоторых других контекстах:
Какединственный тип параметра в прототипе функции, как в int func(void)
, указывает, что функция не имеет параметров.(C ++ использует для этого пустые скобки, но они означают что-то еще в C.)
В качестве типа возврата функции, как и в void func(int n)
, это означает, что функция не возвращает noрезультат.
void*
- это тип указателя, который не указывает, на что он указывает.
В принципе, все эти виды использованияобратитесь к type void
, но вы также можете думать о них как о специальном синтаксисе, который использует одно и то же ключевое слово.