在C中是无效的数据类型?

时间:2010-08-15 14:07:30

标签: c types void

void是C编程语言中的数据类型吗?如果是这样,它可以存储什么类型的值?如果我们有intfloatchar等来存储值,为什么需要void?什么是虚空的范围?

3 个答案:

答案 0 :(得分:74)

Void被认为是一种数据类型(出于组织目的),但它基本上是一个用作占位符的关键字,您可以在其中放置数据类型,以表示“无数据”。

因此,您可以声明一个不返回值的例程:

void MyRoutine();

但是,你不能声明这样的变量:

void bad_variable;

但是,当用作指针时,它具有不同的含义:

void* vague_pointer;

这声明了一个指针,但没有指定它指向的数据类型。

答案 1 :(得分:23)

是的,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,但您也可以将它们视为恰好使用相同关键字的特殊语法。

答案 2 :(得分:5)

C标准说void是一个无法完成的不完整类型(与其他可以完成的不完整类型不同)。这意味着您无法将sizeof运算符应用于void,但您可以指向不完整的类型。