【问题标题】:Does every expression in C have a value? How about the function call with void as a result? [duplicate]C 中的每个表达式都有值吗?结果是 void 的函数调用怎么样? [复制]
【发布时间】:2022-01-02 12:09:11
【问题描述】:

如标题。

void foo() {}
int main(void) {
  foo();  // what is the value of this expression?
}

这是否意味着void 也是C 中的一种值?或者我应该怎么理解?

【问题讨论】:

  • 更添混乱...void 不是真正的类型,但void * 是...
  • // what is the value of this expression? - 没什么,它只会执行foo() 函数。

标签: c


【解决方案1】:

嗯,是的,也不是。不,void 是一种没有价值的类型。顾名思义,它表示表达式中没有类型。但是是的,因为表示类型的缺失意味着它具有价值。而该值只是在需要能够区分不同类型数据的语言中表示任何内容。

【讨论】:

  • 你的意思是说“C中的每个表达式都有一个值”是正确的吗?
【解决方案2】:

void 表达式没有价值,实际上不能使用。这在C standard的第6.3.2.2节中有详细描述:

void 表达式的(不存在的)值(具有 类型void) 不得以任何方式使用,并且隐含或 显式转换(void 除外)不适用于 这样的表达。如果任何其他类型的表达式是 评估为无效 表达式,其值或指示符被丢弃。 (避免 表达式被评估为 副作用。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多