[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Python or Perl for a Debian maintainance project?



On Tue, Feb 17, 2004 at 07:21:00PM +0000, Will Newton wrote:
> On Tuesday 17 Feb 2004 4:58 pm, Andrew Suffield wrote:
> 
> > > void shoe()
> > > {
> > >   /* Do some complicated stuff */
> > >   if (foo == NULL)
> > > 	goto cleanup;
> > >   /* Continue complicated stuff */
> > >   if (bar == 3)
> > > 	goto cleanup;
> > >
> > > cleanup:
> > >   /* Cleanup */
> > > }
> >
> > Good grief, that's *terrible* C. Don't do things like that. The
> > problem here is not a lack of exceptions, it's just bad code. As
> > usual.
> 
> As usual? OK.
> 
> That is an often used convention, used by many substantial pieces of C code 
> that you are running on your system right now. Admittedly it is much more 
> often used in system level situations than application code. It can be argued 
> that much C is *terrible*. That's why it's C.

Your point is that there is a lot of bad C code around? Yes, that's
certainly true, but it's not an excuse for writing more bad C.

> > Here's how you should do that:
> 
> <snip>
> 
> > static bool
> > process_foo(struct foo *foo)
> > {
> >   if (!check_foo(foo))
> >     {
> >       /* report and die */
> >     }
> >
> >   /* process it */
> > }
> >
> > (Most uses of goto should be replaced with function calls; the rest
> > should be replaced with block-structure statements)
> 
> Unfortunately this doesn't necessarily work if you need to do work 
> (allocations, side effects) in between checking foo and bar.

It does if you do it right. I don't exactly write this sort of code
infrequently; it's quite easy to structure your code in a manner that
works neatly and effectively.

-- 
  .''`.  ** Debian GNU/Linux ** | Andrew Suffield
 : :' :  http://www.debian.org/ |
 `. `'                          |
   `-             -><-          |

Attachment: signature.asc
Description: Digital signature


Reply to: