【问题标题】:VOID data type in CC中的VOID数据类型
【发布时间】:2015-01-21 10:44:57
【问题描述】:

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

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

【问题讨论】:

  • 可能只是 stackoverflow.com/questions/6884061/… 的副本——tl,dr 是“C 中没有这样的东西”。
  • 我不明白这个问题。给出什么错误?问题是void 类型的变量无法声明还是sizeof(void) 的计算结果为1?
  • 如果您稍微努力一下正确地格式化它,那实际上会是一个很好的问题。
  • 为什么需要void 变量?如果要保留内存并将其用于不同的数据类型,请使用相应的成员定义union。 void 用于函数返回值(缺失)或抽象指针。

标签: c type-conversion


【解决方案1】:

sizeof (void) 在 C 中无效,在 GNU C 中允许作为扩展以允许使用 void * 进行指针运算。

来自gccdocumentation:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      参考为什么“void”没有被简单地定义为具有适当转换规则的“typedef struct{} void”(即空结构),是否有特定的原因? ...

      这最初是由Steve Bourne 在AB33/Mar 1972 中为Algol68 建议的...

      注意:Algol68 没有指针算法...但是可以使用数组切片。

      【讨论】:

        猜你喜欢
        • 2011-03-30
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2014-06-29
        • 2013-04-26
        • 2010-12-19
        • 2015-10-03
        • 1970-01-01
        相关资源
        最近更新 更多