[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Refreshed genx.h, plus some plans


h plus

Tim Bray wrote:

> On Jan 24, 2004, at 5:20 PM, Joe English wrote:
> [on the subject of 'const']
> > Even if you don't consider it useful, it's a good idea
> > to make interfaces const-correct anyway just to avoid
> > impedance mismatches with other parts of the system.
>
> Using const variables means is that I have to cast the bloody variables
> every time I want to call strcpy() or sprintf() or any other bloody
> thing.  Which substantially uglifies the code.  -Tim


Hm, that doesn't sound right.  The only time const-correctness
uglifies code in that way is when you need to pass const objects
to an interface that's *not* const-correct.

If you make genx const-correct, you shouldn't encounter any
const-related ugliness in the implementation, as long as it
only relies on other const-correct interfaces (which strcpy(),
sprintf(), et al., most certainly are unless you've got a
broken compiler).

If OTOH the genx interface is *not* const-correct, you'll impose
the ugliness on *users* of the API who get data from a const-correct
library and need to pass it into yours.

Concrete example: if you declare

    int genxComment(genxWriter w, const utf8Byte * text);

then a user of the genx API can pass either a 'const utf8Byte *'
or a plain 'utf8Byte *' to the routine, without any compiler
warnings.

genxComment() in turn can pass 'text' to strcpy (as the second
argument), etc., also without any compiler warnings.  [*]

Conversely, if you declare:

    int genxComment(genxWriter w, utf8Byte * text);

then users of the API can *only* pass plain, non-const 'utf8Byte *'s
to the routine.  If they happen to have a 'const utf8Byte *',
then *they* need to do a cast, or copy to a non-const buffer,
or perform some other gyration.

So if genxComment() does not, in fact, write into 'text', declaring
it 'const' is a win.


--Joe English

  jenglish@f...


[*] Of course if genxComment() passes 'text' to strcpy() as the
    *first* argument, it *will* get a warning -- but if it does
    that then the 'text' parameter shouldn't have been declared
    'const' in the first place.

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.