Some time ago, a colleague of mine told me to look at a function. It was something similar to this:
void foo(struct bar array[], unsigned int count)
{
/* some initialization code */
for (int i = 0; i < count; i++) {
/* 30 rows of code
doing something with array[i]*/
}
for (int i = 0; i < count; i++) {
/* other 20 rows of code
doing something with array[i]*/
}
/* some cleanup code */
}
At first, I thought that, in the first loop, some data needed by the second loop were calculated. But after a closer look, I found that this was not the case. Furthermore, I saw that the first five or six rows of both loops were the same.
The explanation is that the second loop has been added years later the first by a different developer that didn't want to waste time in understanding what the first loop did. You may not like it, but it works, unless you have performance issues. Personally, I think there are funnier ways to make two loops in a row.
Image by Coasterman1234 from Wikimedia Commons licensed under CC BY-SA 3.0.
Post updated on 2022/06/05.