0

请考虑以下代码:

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

我对上述代码的目标或逻辑是,在每个“l”实例之后,必须检查 rx_state == MAC_COLL,如果为真,则应执行“col++”行。(对不起,我想我是在向专家解释“for循环”的基础知识)最后,我需要返回碰撞总数(col)。

现在,我关心的是整数 'l' 与 'rx_state_ == MAC_COLL' 中涉及的变量没有特别的联系;我只想不断检查语句“rx_state == MAC_COLL”,直到它为假和要返回的数字。

上面的代码能满足我的目标吗?

谢谢

4

3 回答 3

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.

于 2013-04-30T05:53:48.660 回答
1

一个while循环在这里可能会更好:

while (rx_state_== MAC_COLL)
    col++;

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

于 2013-04-30T05:52:00.297 回答
0

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

int col=0;
while(rx_state_== MAC_COLL)
{
    col = col+1; // or col++;
}
return col;
于 2013-04-30T05:52:12.690 回答