[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Refreshed genx.h, plus some plans
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! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|