C中的VOID数据类型

时间:2015-01-21 10:44:57

标签: c type-conversion

如果我使用void声明任何变量,则会出错,但sizeof(void)为1。 这是什么原因?

void var; // it gives error
printf("sizeof(void) = %d", sizeof(void)); //prints 1

3 个答案:

答案 0 :(得分:6)

sizeof (void)在C中无效,并且在GNU C中被允许作为允许使用void *的指针算法的扩展。

来自gcc documentation

  

在GNU C中,指向void的指针和指向函数的指针都支持加法和减法操作。这是通过将void或函数的大小视为1来完成的。[...]这样做的结果是在void和函数类型上也允许sizeof,并返回1.

答案 1 :(得分:0)

从C和Algol68派生的几种编程语言中的void类型是正常返回的函数的结果类型,但不向其调用者提供结果值。通常会调用此类函数的副作用,例如执行某些任务或写入其输出参数。 据我所知,你不能使用void作为数据类型,因为值为true或false语句,布尔值默认为1,因此,它打印1。

答案 2 :(得分:0)

c.f。是否有一个特定的原因,为什么“void”不是简单地定义为具有适当的投射规则的“typedef struct {} void”(即一个空结构)? ......

最初由Steve Bourne AB33/Mar 1972 Algol68splitjoin建议...

注意:Algol68没有指针算术......但阵列切片可用。