Является ли void тип данных в C? - PullRequest
47 голосов
/ 15 августа 2010

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

Ответы [ 3 ]

74 голосов
/ 15 августа 2010

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

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

void MyRoutine();

Но вы не можете объявить переменную следующим образом:

void bad_variable;

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

void* vague_pointer;

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

23 голосов
/ 28 декабря 2012

Да, 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, но вы также можете думать о них как о специальном синтаксисе, который использует одно и то же ключевое слово.

5 голосов
/ 28 декабря 2012

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

...