Quote Originally Posted by c99tutorial
If you were the kind of person who is blindly following the "don't ever use continue" rule, then the above loop will probably end up looking like this instead:

Code:
while (fgets(ln, MAX, stdin)) {
    if (!is_blank(ln) && !is_comment(ln)) {
        /* process line ... */
    }
    // NB: please don't put any code here
}
This version is inferior to me because it adds an extra level of indentation for no reason. Plus in this version you really need to make sure you don't put any code right before the closing brace of the loop if you want to properly emulate 'continue'. In real code, people never add such a comment so when you review the code you have to carefully make sure that no surprise code gets added after your monster if block exits.
As I mentioned in post #2, I think that this is better than using continue, given that there are few conditions. I do not see the "extra" level of indentation as being for "no reason": it reminds the reader that there is a selection going on in the loop. The problem is that when there are too many conditions, using continue (or in a function, doing an early return: after all, with many conditions chances are moving the code to a separate function would be a good idea) is better because one would otherwise either end up with a hard to read long condition, or there would indeed be excessive nesting.