尽管风格不好,但是在parens中有一个带有括号的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);
}
如果可能出现这些问题,我是否应该在第一次关闭括号后添加分号,或者是否会添加空语句?
我确实认识到,在for循环之外移动char*
声明并将swap
移动到循环内部的末尾会更好。但风格不是这个问题的重点,我只是想知道是否可以在括号内放置括号。
答案 0 :(得分:9)
之前我已经回答了这个问题......通过添加本地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);
}
答案 1 :(得分:6)
不,这不合法,但你可以用逗号来到中途:
for (int a = 1, b = 2; a < 10; ++a, ++b)
你不能声明不同类型的多个变量,并且你不能在最后一位使用控制结构,但它在大多数情况下都足够好。
如果您不知道,那里使用的逗号没有一些只能在for
循环中使用的特殊语法,它可以在任何地方用于评估左操作数的通用operator ,然后是右操作数,并返回正确表达式的结果,即a, b == b
和a, b, c == c
等等。
答案 2 :(得分:3)
不,这不合法。如果它是合法的,代码将无法正常工作,因为c具有块级范围,因此您将无法访问大括号中定义的变量。
答案 3 :(得分:2)
答案 4 :(得分:1)
您是否使用gcc
语句表达式? http://tigcc.ticalc.org/doc/gnuexts.html#SEC63
也许这会使这种类型的代码工作。除了(int i = { stmts; }; { stmts; bool}; { ... })
答案 5 :(得分:0)
标准说(6.8.5.3/1)
for(clause-1; expr-2; expr-3)statement
我非常确定expr-2
或expr-3
都不能替换为表达式(块不是表达式),我很确定clause-1
也不能被陈述所取代。