Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.


__UNCONST(3)               Library Functions Manual               __UNCONST(3)

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.

NetBSD 10.99                   October 17, 2013                   NetBSD 10.99