void
ли тип данных на языке программирования C? Если да, то какой тип ценностей он может хранить? Если у нас есть int
, float
, char
и т. Д., Чтобы хранить значения, почему это void
?
Void считается типом данных (для организационных целей), но в основном это ключевое слово для использования в качестве заполнителя, где вы бы поместили тип данных, чтобы представлять «нет данных».
Следовательно, вы можете объявить процедуру, которая не возвращает значение как:
void MyRoutine();
Но вы не можете объявить такую переменную:
void bad_variable;
Однако, когда он используется как указатель, он имеет другое значение:
void* vague_pointer;
Это объявляет указатель, но не указывая, какой тип данных он указывает.
Да, void
– это тип. Является ли это типом данных, зависит от того, как вы определяете этот термин; в стандарте C нет.
Стандарт определяет термин «тип объекта». В C99 и ранее; void
не является типом объекта; в C11 это так. Во всех версиях стандарта void
является неполным типом . Что изменилось в C11, так это то, что неполные типы теперь являются подмножеством типов объектов; это всего лишь изменение терминологии. (Другой тип типа – это тип функции .)
C99 6.2.6 в пункте 19 говорится:
Тип void содержит пустой набор значений; это неполный тип, который не может быть завершен.
Стандарт C11 слегка меняет формулировку:
Тип void содержит пустой набор значений; это неполный тип объекта, который не может быть завершен.
Это отражает изменение C11 в определении типа объекта, включающее неполные типы; это ничего не меняет в природе типа void
.
Ключевое слово void
также может использоваться в некоторых других контекстах:
Как единственный тип параметра в прототипе функции, как и в int func(void)
, он указывает, что функция не имеет параметров. (C ++ использует пустые скобки для этого, но они означают что-то другое в C.)
В качестве возвращаемого типа функции, как и в void func(int n)
, он указывает, что функция не возвращает результат.
void*
– тип указателя, который не указывает, на что он указывает.
В принципе, все эти применения относятся к типу типа void
, но вы также можете думать о них как о простом синтаксисе, использующем одно и то же ключевое слово.
В стандарте C указано, что void
является неполным типом, который не может быть завершен (в отличие от других неполных типов, которые могут быть завершены). Это означает, что вы не можете применить оператор sizeof
к void
, но вы можете иметь указатель на неполный тип.