Module Name: src
Committed By: christos
Date: Thu Oct 17 16:50:36 UTC 2013
Modified Files:
src/share/man/man3: Makefile
Added Files:
src/share/man/man3: __USE.3
Log Message:
describe the __USE macro
To generate a diff of this commit:
cvs rdiff -u -r1.81 -r1.82 src/share/man/man3/Makefile
cvs rdiff -u -r0 -r1.1 src/share/man/man3/__USE.3
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/share/man/man3/Makefile
diff -u src/share/man/man3/Makefile:1.81 src/share/man/man3/Makefile:1.82
--- src/share/man/man3/Makefile:1.81 Thu Dec 6 20:54:41 2012
+++ src/share/man/man3/Makefile Thu Oct 17 12:50:36 2013
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.81 2012/12/07 01:54:41 christos Exp $
+# $NetBSD: Makefile,v 1.82 2013/10/17 16:50:36 christos Exp $
# @(#)Makefile 8.2 (Berkeley) 12/13/93
-MAN= _DIAGASSERT.3 __CONCAT.3 __UNCONST.3 CMSG_DATA.3 \
+MAN= _DIAGASSERT.3 __CONCAT.3 __UNCONST.3 __USE.3 CMSG_DATA.3 \
__alignof__.3 __arraycount.3 \
__builtin_constant_p.3 __builtin_prefetch.3 \
__builtin_return_address.3 \
Added files:
Index: src/share/man/man3/__USE.3
diff -u /dev/null src/share/man/man3/__USE.3:1.1
--- /dev/null Thu Oct 17 12:50:36 2013
+++ src/share/man/man3/__USE.3 Thu Oct 17 12:50:36 2013
@@ -0,0 +1,122 @@
+.\" $NetBSD: __USE.3,v 1.1 2013/10/17 16:50:36 christos Exp $
+.\"
+.\" Copyright (c) 2013 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd October 17, 2013
+.Dt __USE 3
+.Os
+.Sh NAME
+.Nm __USE
+.Nd compile time macro that marks a variable as being used.
+.Sh SYNOPSIS
+.In sys/cdefs.h
+.Ft void
+.Fn __USE x
+.Sh DESCRIPTION
+The
+.Nm __USE
+macro can be used to omit warnings produced by certain compilers when
+variables are being set, but not used in a function.
+.Pp
+There are cases where it is simpler to mark a variable as used, as opposed
+to ifdef out its use:
+.Bd -literal -offset indent
+#ifdef DEBUG_FOO
+#define DPRINTF(a) printf a
+#else
+#define DPRINTF(a)
+
+void
+foo(void) {
+ int var;
+
+ var = getval();
+
+ DPRINTF(("val is %d\n", val));
+}
+.Ed
+.Pp
+In this case, ifdefing the code would make it:
+.Bd -literal -offset indent
+void
+foo(void) {
+#ifdef DEBUG_FOO
+ int var;
+
+ var = getval();
+
+ DPRINTF(("val is %d\n", val));
+#else
+ (void)getval();
+#endif
+}
+.Ed
+.Pp
+This is not desirable because it duplicates code.
+With the
+.Nm __USE
+macro this can be written as:
+.Bd -literal -offset indent
+void
+foo(void) {
+ int var;
+
+ var = getval();
+
+#ifdef DEBUG_FOO
+ DPRINTF(("val is %d\n", val));
+#else
+ __USE(var);
+#endif
+}
+.Ed
+.Pp
+without producing compiler warnings.
+.Pp
+Although it is simple to write:
+.Bd -literal -offset indent
+ (void)var;
+.Ed
+.Pp
+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.
+.Sh IMPLEMENTATION NOTES
+.Nm
+is implemented as:
+.Bd -literal -offset indent
+#define __USE(a) ((void)(a))
+.Ed
+.Sh SEE ALSO
+.Xr cc 1 ,
+.Xr cdefs 3
+.Sh CAVEATS
+.Nm
+should be used sparingly as it can cause valid warnings to be hidden.
+.Pp
+Use of this macro is non-portable; this is part of the implementation
+namespace and should only be used in
+.Nx
+code.