OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] Refreshed genx.h, plus some plans

[ Lists Home | Date Index | Thread Index ]


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@flightlab.com


[*] 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.




 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS