如果我使用void
声明任何变量,它会给出错误,但sizeof(void)
为1. 这是什么原因?C中的VOID数据类型
void var; // it gives error
printf("sizeof(void) = %d", sizeof(void)); //prints 1
如果我使用void
声明任何变量,它会给出错误,但sizeof(void)
为1. 这是什么原因?C中的VOID数据类型
void var; // it gives error
printf("sizeof(void) = %d", sizeof(void)); //prints 1
void类型,在从C和Algol68的衍生多种编程语言,是对于通常返回一个函数的结果的类型,但不提供一个结果值到它的调用者。通常会调用这些函数来获得其副作用,例如执行一些任务或写入其输出参数。 根据我的知识,不能使用void作为数据类型,因为值为true或false语句布尔值默认为1,所以它打印出1.
sizeof (void)
在C中无效,并且在GNU中允许C作为扩展名,允许指针运算与void *
。
从gcc
documentation:
在GNU C,加法和减法运算被支撑在指针中的孔隙和指向函数的指针。这是通过将空白或函数的大小视为1来实现的。[...]结果是,sizeof也被允许在空白和函数类型上,并且返回1.
这非常有用。谢谢 – anp4355 2015-01-21 11:58:52
c.f.是否有一个具体的原因,为什么“void”不是简单地定义为“typedef struct {} void”(即一个空的结构)与适当的转换规则? ...
这原本是由Steve Bourne在AB33/Mar 1972为Algol68建议...
注:Algol68的没有指针运算......但阵列切片可用。
可能只是http://stackoverflow.com/questions/6884061/cant-compile-with-void-variable-in-c的副本 - tl,dr是“C中没有这种东西”。 – usr2564301 2015-01-21 10:47:01
我不明白这个问题。什么错误给出?问题是无法声明类型为'void'的变量,或者sizeof(void)'的值为'1'? – Codor 2015-01-21 10:47:16
如果你做了一些适当的格式化工作,那实际上会产生一个很好的问题。 – 2015-01-21 10:47:24