首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否为({statements;};condition;{statements;})合法的C?

是否为({statements;};condition;{statements;})合法的C?
EN

Stack Overflow用户
提问于 2010-10-04 07:38:16
回答 6查看 273关注 0票数 5

尽管风格不好,但在C中使用带括号的for循环合法吗?如下所示:

代码语言:javascript
复制
char *a = "a ";
char *b = "b ";

for ( { int aComesFirst = 1;
        char *first = a;
        char *second = b;
      };
      aComesFirst >= 0;
      { aComesFirst--;
        swap(first, second);
      } )
{
  printf("%s%s\n", first, second);
}

如果可以这样做,我是应该在第一个右大括号后面加一个分号,还是应该加一个空语句?

我确实意识到,将char*声明移出for循环并将swap移到循环内部的末尾,在风格上会更好。但是风格不是这个问题的重点,我只想知道是否可以在花括号中放大括号。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-04 07:46:38

我在…之前已经回答过这个问题了通过添加本地struct类型,这在C或C++中很容易变得合法。不过,这通常是一种糟糕的风格。

代码语言:javascript
复制
char *a = "a ";
char *b = "b ";

for ( struct loopy {
        int aComesFirst;
        char *first;
        char *second;
      } l = { 1, a, b }; /* define, initialize structure object */

      l.aComesFirst >= 0; /* loop condition */

      l.aComesFirst--, /* loop advance */
      swap(l.first, l.second)
    )
{
  printf("%s%s\n", l.first, l.second);
}
票数 9
EN

Stack Overflow用户

发布于 2010-10-04 07:43:05

不,这是不合法的,但你可以使用逗号来达到一半:

代码语言:javascript
复制
for (int a = 1, b = 2; a < 10; ++a, ++b)

你不能声明多个不同类型的变量,你也不能在最后一点使用控制结构,但大多数时候它已经足够好了。

如果你不知道,这里使用的逗号并不是一些只能在for循环中使用的特殊语法,它是一个通用的operator,可以在任何地方使用它来计算左操作数,后面跟着右操作数,并返回右表达式的结果,即a, b == ba, b, c == c等等。

票数 7
EN

Stack Overflow用户

发布于 2010-10-04 07:44:07

不,这是不合法的。如果它是合法的,代码无论如何都不能工作,因为c有块级作用域,所以你不能访问花括号中定义的变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3852019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档