尽管风格不好,但在C中使用带括号的for循环合法吗?如下所示:
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移到循环内部的末尾,在风格上会更好。但是风格不是这个问题的重点,我只想知道是否可以在花括号中放大括号。
发布于 2010-10-04 07:46:38
我在…之前已经回答过这个问题了通过添加本地struct类型,这在C或C++中很容易变得合法。不过,这通常是一种糟糕的风格。
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);
}发布于 2010-10-04 07:43:05
不,这是不合法的,但你可以使用逗号来达到一半:
for (int a = 1, b = 2; a < 10; ++a, ++b)你不能声明多个不同类型的变量,你也不能在最后一点使用控制结构,但大多数时候它已经足够好了。
如果你不知道,这里使用的逗号并不是一些只能在for循环中使用的特殊语法,它是一个通用的operator,可以在任何地方使用它来计算左操作数,后面跟着右操作数,并返回右表达式的结果,即a, b == b和a, b, c == c等等。
发布于 2010-10-04 07:44:07
不,这是不合法的。如果它是合法的,代码无论如何都不能工作,因为c有块级作用域,所以你不能访问花括号中定义的变量。
https://stackoverflow.com/questions/3852019
复制相似问题