Updated: 2022/Sep/29

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


__USE(3)                   Library Functions Manual                   __USE(3)

NAME
     __USE - compile time macro that marks a variable as being used

SYNOPSIS
     #include <sys/cdefs.h>

     void
     __USE(x);

DESCRIPTION
     The __USE macro can be used to omit warnings produced by certain
     compilers when variables are being set, but not used in a function.

     There are cases where it is simpler to mark a variable as used, as
     opposed to ifdef out its use:

           #ifdef DEBUG_FOO
           #define DPRINTF(a) printf a
           #else
           #define DPRINTF(a)

           void
           foo(void) {
                   int var;

                   var = getval();

                   DPRINTF(("val is %d0, var));
           }

     In this case, ifdefing the code would make it:

           void
           foo(void) {
           #ifdef DEBUG_FOO
                   int var;

                   var = getval();

                   DPRINTF(("val is %d0, var));
           #else
                   (void)getval();
           #endif
           }

     This is not desirable because it duplicates code.  With the __USE macro
     this can be written as:

           void
           foo(void) {
                   int var;

                   var = getval();

           #ifdef DEBUG_FOO
                   DPRINTF(("val is %d0, var));
           #else
                   __USE(var);
           #endif
           }

     without producing compiler warnings.

     Although it is simple to write:

                   (void)var;

     abstracting this into the macro allows for alternate implementations, as
     well as changing it to an empty implementation so that the liveness of
     the variable can be re-evaluated.

IMPLEMENTATION NOTES
     __USE is implemented as:

           #define __USE(a)        ((void)(a))

SEE ALSO
     cc(1), cdefs(3)

CAVEATS
     __USE should be used sparingly as it can cause valid warnings to be
     hidden.

     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