【问题标题】:Can I Use post increment in function return in C? [closed]我可以在 C 中的函数返回中使用后增量吗? [关闭]
【发布时间】:2021-08-23 08:35:06
【问题描述】:

我可以像这样在 C 中的函数返回中使用后增量吗?

int meta_solve() {    
  //some codes
  return metaData[head++]; //head is global variable
}

我问这个问题是因为它在 windows 和 mac 上显示了不同的结果。感谢您的关注。祝你有美好的一天!

【问题讨论】:

  • 这取决于你如何调用函数。如果您调用该函数两次且它们之间没有序列点,则它们被调用的顺序未指定,因此增量的顺序将发生变化。
  • 发布minimal reproducible example 来证明您遇到的问题。
  • 什么是headmetaData[] 是什么?
  • @Barmar 虽然这是真的,但它不会改变 return 语句中的后增量是好的。
  • 不是 windows 或 mac 的东西,而是一个编译器来自另一个,显示你认为不同的每个编译器的反汇编

标签: c function return post-increment


【解决方案1】:

是的,这会起作用。

在表达式 metaData[head++] 被完全计算之前不会发生返回,因此(全局)变量 head 在函数返回之前递增。

【讨论】:

  • 实际上,C 标准中的一个缺陷是规范文本中没有任何内容表明return 语句之后有一个序列点。理论上,允许在函数返回后发生增量。如果调用在更大的表达式中,则增量可能不会相对于表达式中的其他内容进行排序。
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2011-01-15
  • 2018-09-18
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多