【问题标题】:Is there a way to create a for loop with only two expressions in C?有没有办法在 C 中创建一个只有两个表达式的 for 循环?
【发布时间】:2014-06-03 20:11:33
【问题描述】:

我在 C 标准文本中遇到了这个问题,我可以在 §6.8.5 找到 C99 或 C11 的任何版本:

iteration-statement:
  while ( expression ) statement
  do statement while ( expression ) ;
  for ( expression ; expression ; expression ) statement
  for ( declaration expression ;  expression ) statement

这里的第四项似乎是一个只有一个分号的for,我在其他任何地方都没有看到任何对这种语法的引用。谁能在这里解释我错过了什么?

【问题讨论】:

  • 这似乎也无法编译。也许这是一个错字,他们打算在后面多加一个分号,没有正文?
  • @merlin2011 : 十多年来没有人注意到,错字找到了进入 C11 的方式?
  • 看来你终于发现了... :-)

标签: c for-loop


【解决方案1】:

declaration 的产生式是:

声明:
声明说明符 init-declarator-listopt;

所以分号已经是它的一部分了。

【讨论】:

  • 似乎 OP 错过了(或忘记了)这件小事...... :) +1!!
  • 太好了,是的,我错过了这个小东西!谢谢!不错的发现 nwellnhof
  • 哦,等等,我可以在 for 循环中使用 static_assert-declaration 吗?它在 C11 的声明语法中。
  • @BuellaGábor 哦,这很有趣。 GCC 接受它,clang 拒绝它作为语法错误(它不是)。 IMO,目前尚不清楚约束“for 语句的声明部分应仅声明具有存储类autoregister 的对象的标识符。”本来是不允许这样做的,但在我看来,它就是这样做的(即使它实际上没有这样做)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2021-04-22
  • 2020-07-23
  • 1970-01-01
相关资源
最近更新 更多