| __UNCONST(3) | Library Functions Manual | __UNCONST(3) |
__UNCONST —
compile time cast-away macro
#include
<sys/cdefs.h>
void
__UNCONST(x);
void
__UNVOLATILE(x);
The
__UNCONST()
macro can be used to omit warnings produced by certain compilers when
operating with pointers declared with the const type
qualifier in a context without such qualifier. Examples include passing a
pointer declared with the const qualifier to a function
without such qualifier, and variable assignment from a
const pointer to a non-const pointer. In the same vein,
the
__UNVOLATILE()
macro can be used to exclude warnings related to the
volatile type qualifier.
These macros are implemented by explicitly using unsigned long instead of intptr_t, a signed type guaranteed to hold a pointer.
As both macros may hide valid errors, their usage is not
recommended unless there is a well-thought reason for a cast. A typical use
case for __UNCONST() involve an API that does not
follow the so-called ``const correctness'' even if it would be appropriate.
Valid use cases of __UNVOLATILE() include passing a
volatile pointer to
memset(3).
Use of this macro is non-portable; this is part of the implementation namespace and should only be used in NetBSD code.
| October 17, 2013 | NetBSD 11.0 |