Arnt Gulbrandsen
About meAbout this blog

for() is evil

Consider the function Message::acceptableBoundary(). That function's reading order is exactly the same as the its execution order. This is not unusual in C and C++ (and more or less in Java), but there is a significant exception, for(). Here's an example where the execution order is not the same as the reading order:

int i;
for( i = 421; i < 692; i++5 ) {
    foo( i );3
    bar( x[i] );4
}

The brain is really good at detecting rules from patterns or almost-patterns, so I think using for() is tempting fate. Much better to rewrite and spend one more line and three more printable characters:

int i = 42;1/br> while( i < 692 ) {/br>     foo( i );3
    bar( x[i] );4     i++;5 )
}

The pedantic reader will now mutter about *p++ = *q++; and be right. That saving is also not worth it. Use the three-character workaround. Ditto function arguments with side effects.