Message-Id: <4.3.2.7.0.20000803161722.00aa8bf0@mail.subdimension.com> X-Sender: matt DOT l AT mail DOT subdimension DOT com X-Mailer: QUALCOMM Windows Eudora Version 4.3.2 Date: Thu, 03 Aug 2000 16:25:27 -0700 To: djgpp AT delorie DOT com From: Matt Lewandowsky Subject: Re: BREAKing out of a nested loop In-Reply-To: <8mcse7$3pa$1@plato.wadham.ox.ac.uk> References: <005a01bffd43$030a3520$0500007b AT brk> <4 DOT 3 DOT 2 DOT 7 DOT 0 DOT 20000803145250 DOT 00aa2310 AT mail DOT subdimension DOT com> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="-==--=---==----===-==-=--=-====----=--===-==--=="; protocol="application/pgp-signature"; micalg=pgp-sha1 Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk ---==--=---==----===-==-=--=-====----=--===-==--== Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed I was just pointing out that getting into the habit of using goto makes it far too easy to short-circuit things that the programmer *was* clueful enough to do. Lets say that you malloc() at the beginng of a *huge* nested loop and free() at the end. However, you find that you need to break out early and forget about the malloc(). Using goto would introduce a leak that may be hard to find. I'm not saying don't goto, just to apply good technique to using it. Make sure you step through the loop to make sure you don't need anything in it after that level, etc. It shouldn't be used as a cure-all. Which many people see it as at first. (Until something goes "Boom!" and they never touch it again...) And I'm a proponent of using perl/python/etc. for CGIs. Especially if you can't thoroughly test it from a command line first... I just try to be paranoid. ;) --Matt At 03:41 PM 8/3/00, J-P wrote: >In article <4 DOT 3 DOT 2 DOT 7 DOT 0 DOT 20000803145250 DOT 00aa2310 AT mail DOT subdimension DOT com>, >Matt Lewandowsky wrote: > >One good reason to keep in mind: you may get into the habit of using it. > >And in C, it's a worse habit than BASIC. Let's say that you have an > >oft-used loop whose nesting make this one look simple. Let's say you want > >to break out of it simply. Lets say that you forgot there's a free() five > >levels out after this point. You use goto. See a potential problem? > >If you're going to worry about that sort of thing, you should maybe quit >using C and go for, say, Perl or something. C assumes in so /many/ places >that you're clueful enough to free() what you malloc(), or check your >malloc()s to make sure they don't point to NULL. C is, all things being >equal, not safe. goto is a tool like anything else in C and whilst it >should only be used with care, so should sprintf(). > >(The comparison with Perl is only there because someone crashed our server >with a fscked C++ CGI script a week ago... I think he did something >insane with malloc()s, which he shouldn't have been using in C++ >anyways.... :-/ ) > >J-P ---==--=---==----===-==-=--=-====----=--===-==--== Content-Type: application/pgp-signature -----BEGIN PGP MESSAGE----- Version: PGPfreeware 6.5.3 for non-commercial use iQA/AwUBOYn/ZuoMko8dOmunEQIHdQCg+wAZcI46tIue3wog12Jr8Y48hGkAoJYc rz4fmOPinzTpsdKPcbpgpvLq =2XOo -----END PGP MESSAGE----- ---==--=---==----===-==-=--=-====----=--===-==--==--