Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Re: Re: Re: block-based programming...

by elusion (Curate)
on Apr 22, 2004 at 19:24 UTC ( [id://347464] : note . print w/replies, xml ) Need Help??

in reply to Re: Re: block-based programming...
in thread block-based programming...

And I would make a small change on that to use a break and reduce the level of indentation.
while (close(soc) < 0) { if (errno == EINTR) continue; perror("close"); exit 1; }
I hope that's valid C. I don't really use it much.

Replies are listed 'Best First'.
Re: Re: Re: Re: block-based programming...
by flyingmoose (Priest) on Apr 22, 2004 at 19:46 UTC

    Here is why I did that though -- continue is just a goto by any other name. It leads to pollution of readable conditionals and loops just as the way a real goto causes an avoidance of conditionals and loops.

    The end result of using continue in long blocks of nested code is code that cannot be easily skimmed or traced .. a lesson learned by reading many many thousands of lines of bad C code. Especially when the level of nesting exceeds one, continue becomes a jump. Continue with block labels is even worse -- it's a PURE goto, only more politically correct. Someone will say "I can handle the power!", but I say "think of the children!".

    Also, your loop (by looking at indentation) implies that the perror() is in the main path of code execution, because it is masked by the indentation of the if -- which leads me to think "why is he executing exit periodically in a loop". My example avoids that by making the perror the exception rather than the rule. Subtle, but there was a method to my madness there. And of course, I am mad. There is no doubt about that.