'for循环'中变量的关系

时间:2013-04-30 05:48:06

标签: c++

请考虑以下代码:

int col=0;
for(int l=0; rx_state_== MAC_COLL; l++)
{
col = col+1; // or col++;
}
return col;

上述代码的目标或逻辑是,对于'l'的每个实例,必须检查rx_state == MAC_COLL,如果为true,则应执行“col ++”行。 (对不起,我想我正在向专家解释'for loop'的基础知识)最后,我要求返回总冲突次数(col)。

现在,我关注的领域是整数'l'与'rx_state_ == MAC_COLL'中涉及的变量没有特定的联系;我只是想要继续检查语句'rx_state == MAC_COLL',直到它的错误和要返回的数字。

我的目标是否符合上述代码?

由于

3 个答案:

答案 0 :(得分:3)

您的for循环可以转换为while循环,例如:

int l=0; 
while (rx_state_ == MAC_COLL) { 
    col = col+1;
    l++;
}
return col;

由于您显然没有真正使用l,因此将其编码为实际的while循环可能更简单:

int col = 0;
while (rx_state_ == MAC_COLL)
    ++col;
return col;

...或者您可以将其编码为for循环,执行您真正想要的内容:

for (int col=0; rx_state == MAC_COLL; ++col)
    ;
return col;

要使其中任何一个有意义,rx_stateMAC_COLL最好至少被限定为volatile

答案 1 :(得分:1)

这里的while循环可能会更好:

while (rx_state_== MAC_COLL)
    col++;

但是,如果您只是循环而没有任何其他可能使更改有机会运行的代码,那么您应该考虑如何 rx_state。如果你正在使用线程,那么有更好的方法而不是忙等待(可能使用很多的CPU功率基本上什么也没做)。如果必须忙等待,那么我建议你在循环中抛出一个短暂的延迟,让CPU做除了循环之外的其他事情。

答案 2 :(得分:0)

会的。但你所做的基本上是一段时间。

int col=0;
while(rx_state_== MAC_COLL)
{
    col = col+1; // or col++;
}
return col;