2015-01-21 28 views
-1

如果我使用void声明任何变量,它会给出错误,但sizeof(void)为1. 这是什么原因?C中的VOID数据类型

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

可能只是http://stackoverflow.com/questions/6884061/cant-compile-with-void-variable-in-c的副本 - tl,dr是“C中没有这种东西”。 – usr2564301 2015-01-21 10:47:01

+0

我不明白这个问题。什么错误给出?问题是无法声明类型为'void'的变量,或者sizeof(void)'的值为'1'? – Codor 2015-01-21 10:47:16

+3

如果你做了一些适当的格式化工作,那实际上会产生一个很好的问题。 – 2015-01-21 10:47:24

回答

0

void类型,在从C和Algol68的衍生多种编程语言,是对于通常返回一个函数的结果的类型,但不提供一个结果值到它的调用者。通常会调用这些函数来获得其副作用,例如执行一些任务或写入其输出参数。 根据我的知识,不能使用void作为数据类型,因为值为true或false语句布尔值默认为1,所以它打印出1.

6

sizeof (void)在C中无效,并且在GNU中允许C作为扩展名,允许指针运算与void *

gccdocumentation

在GNU C,加法和减法运算被支撑在指针中的孔隙和指向函数的指针。这是通过将空白或函数的大小视为1来实现的。[...]结果是,sizeof也被允许在空白和函数类型上,并且返回1.

+0

这非常有用。谢谢 – anp4355 2015-01-21 11:58:52

0

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

这原本是由Steve BourneAB33/Mar 1972Algol68建议...

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