Subject: Re: __UNCONST(a)
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Greg A. Woods <woods@weird.com>
List: tech-userlevel
Date: 07/02/2004 14:43:20
[ On Friday, July 2, 2004 at 01:36:47 (-0400), der Mouse wrote: ]
> Subject: Re: __UNCONST(a)
>
> Actually, I usually want to strip all qualifiers.  const simply happens
> to be the most relevant one because it's the one for which poisoning is
> most important.  In a few programs I've used a deconst-alike that takes
> const volatile void * and returns void *.

OK, it's one thing that we have standards specified APIs that are
"difficult" to implement in strict Standard C without stripping "const"
qualifiers, but it would seem unnecessary (to the point of being a very
bad practice) for an application author to design an API that also
required similar hacks in order to be implemented "quietly".

I.e if you're designing a function which manipulates pointers and/or
reads values from storage being pointed to, but never changes the
storage being pointed to and which then might return a pointer (in)to
one of the same objects as one of its "const"-qualified parameters
pointed to then why the heck wouldn't you just add the "const" qualifier
to the returned pointer type as well?

I think this hack has been proposed to have the name __DECONST(),
i.e. with the leading double underscores, because it's a strictly
internal hack necessary for quieting compiler warnings that would
otherwise spew forth when compiling the implementations of those very
poorly designed Standard C functions.  This macro should not ever be
visible to the application and should never be used by an application
author.

Normally one should never ever try to fool/trick the compiler into
discarding or ignoring a "const" qualifier.  If you're
"const"-qualifying a pointer, especially one that is a function
parameter, then you should really mean it 100% and if you don't really
mean it then you should not be "const"-qualifying it in the first place.

History has apparently tricked us into suffering with some poorly
designed standard functions, but please let us not add to that mess.

-- 
						Greg A. Woods

+1 416 218-0098                  VE3TCP            RoboHack <woods@robohack.ca>
Planix, Inc. <woods@planix.com>          Secrets of the Weird <woods@weird.com>