NAME
__UNCONST —
compile time cast-away
macro
SYNOPSIS
#include <sys/cdefs.h>
void
__UNCONST(
x);
void
__UNVOLATILE(
x);
DESCRIPTION
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.
IMPLEMENTATION NOTES
These macros are implemented by explicitly using
unsigned long
instead of
intptr_t, a signed type guaranteed to hold a
pointer.
SEE ALSO
cc(1),
cdefs(3)
CAVEATS
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.