Подтвердить что ты не робот

Недействителен ли тип данных в C?

Является ли void типом данных в языке программирования C? Если да, то какие значения он может хранить? Если у нас есть int, float, char и т.д. Для хранения значений, зачем нужен void? И каков диапазон пустот?

4b9b3361

Ответ 1

Void считается типом данных (для организационных целей), но в основном это ключевое слово для использования в качестве заполнителя, где вы бы поместили тип данных, чтобы представлять "нет данных".

Следовательно, вы можете объявить процедуру, которая не возвращает значение как:

void MyRoutine();

Но вы не можете объявить такую ​​переменную:

void bad_variable;

Однако, когда он используется как указатель, он имеет другое значение:

void* vague_pointer;

Это объявляет указатель, но не указывая, какой тип данных он указывает.

Ответ 2

Да, void - это тип. Независимо от того, зависит ли этот тип данных от того, как вы определяете этот термин; стандарт C не делает.

Стандарт определяет термин "тип объекта". В C99 и ранее; void не является типом объекта; в C11 это так. Во всех версиях стандарта void является неполным. Что изменилось в C11, так это то, что неполные типы теперь являются подмножеством типов объектов; это всего лишь изменение терминологии. (Другой тип типа - это тип функции.)

C99 6.2.6 в пункте 19 говорится:

Тип void содержит пустой набор значений; это неполное тип, который не может быть завершен.

Стандарт C11 слегка меняет формулировку:

Тип void содержит пустой набор значений; это неполный тип объекта, который не может быть завершено.

Это отражает изменение C11 в определении типа объекта, которое включает неполные типы; это ничего не меняет о характере типа void.

Ключевое слово void также может использоваться в некоторых других контекстах:

  • Как единственный тип параметра в прототипе функции, как в int func(void), он указывает, что функция не имеет параметров. (С++ использует для этого пустые скобки, но они означают что-то еще в C.)

  • Как возвращаемый тип функции, как в void func(int n), он указывает, что функция не возвращает результат.

  • void* - это тип указателя, который не указывает, на что он указывает.

В принципе, все эти применения относятся к типу void, но вы также можете думать о них как о простом синтаксисе, использующем одно и то же ключевое слово.

Ответ 3

В стандарте C указано, что void является неполным типом, который не может быть выполнен (в отличие от других неполных типов, которые могут быть завершены). Это означает, что вы не можете применить оператор sizeof к void, но вы можете иметь указатель на неполный тип.