以下代码片段在接受采访时被告知我,是否有可能在没有阻止的情况下评估for循环的所有语句?
int i, n, t1 = 0, t2 = 1, nextTerm;
for(int i= 0; i < 10; i++)
{
printf("%d ", t1);
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
}
我问他,我认为不可能在没有阻塞的情况下评估for循环的多个语句。但是,我的朋友告诉我,可以使用逗号运算符,如下所示:
int i, n, t1 = 0, t2 = 1, nextTerm;
for(int i= 0; i < 10; i++)
printf("%d ", t1),
nextTerm = t1 + t2,
t1 = t2,
t2 = nextTerm;
我知道comma
运算符如何处理单行语句。但我想知道如何为多行工作comma
运算符?
此外,还有其他办法可以完成这项任务吗?
答案 0 :(得分:6)
注意,不要像上面那样编写代码或者像我要做的那样!
你有一个关于多行的答案,但关于另一种写这种方式的另一个问题是:
for(int i= 0; i < 10; nextTerm = t1 + t2,
t1 = t2,
t2 = nextTerm,
i++)
printf("%d ", t1);
甚至,走到极端......
for(int i= 0; i < 10; printf("%d ", t1),
nextTerm = t1 + t2,
t1 = t2,
t2 = nextTerm,
i++)
/* Hey, empty loop! */;
答案 1 :(得分:5)
这个是单行语句,格式化为多行。
使用这样的逗号运算符完全是胡说八道。删除块完全没有任何目的 - 它只会使你的代码更危险,更难阅读,因为绝对没有任何好处。使用分号。
始终在循环后使用复合语句。 甚至如果循环中只有一个单一的语句 - 历史上最昂贵的错误之一,“苹果公司的故事”是由于使用大括号而引起的。
答案 2 :(得分:3)
有多少行并不重要。重要的是是否有单一陈述。并且语句由分号(;
)分隔。
词法上,C代码忽略了分隔令牌所不需要的空格。所以这个多行声明:
printf("%d ", t1),
nextTerm = t1 + t2,
t1 = t2,
t2 = nextTerm;
就像它写在一行一样:
printf("%d ", t1), nextTerm = t1 + t2, t1 = t2, t2 = nextTerm;
虽然这可能感觉很聪明,但不要写这样的代码。这是混淆的练习。