最近在调试一份代码时,遇到了类似了代码:
#include <iostream>
using namespace std;
int main()
{
int cnt = 0;
while(1)
{
int idx = 0;
for( ; cnt < 20; ++cnt )
{
cout << "cnt = " << cnt << endl;
if( ++idx >= 5 )
{
break;
}
}
if( cnt >= 20 )
break;
}
return 0;
}
上面的代码看上去没有任何问题。实际for相当于do{}while结构,如下所示:
#include <iostream>
using namespace std;
int main()
{
int cnt = 0;
while(1)
{
int idx = 0;
#if 1
do{
if( cnt >= 20 )
{
break;
}
cout << "cnt = " << cnt << endl;
if( ++idx >= 5 )
{
break;
}
++cnt;
}while(1);
#else
for( ; cnt < 20; ++cnt )
{
cout << "cnt = " << cnt << endl;
if( ++idx >= 5 )
{
break;
}
}
#endif
if( cnt >= 20 )
break;
}
return 0;
}
例子中只是输出一个数,但在实际项目中如果能类似代码遍历数组或链表,会现出某些节点被重复遍历。