summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx.manpages@gmail.com>2022-07-22 17:29:48 +0200
committerAlejandro Colomar <alx.manpages@gmail.com>2022-09-05 00:47:18 +0200
commitbea5dac263377600c0a5b5fbf89f2b84a4186acb (patch)
treef5258636645ce57bb7ef084acbc2c5ca0bab6f6b
parent23461f5347cb564812b2a1eedac8a16a87257fe2 (diff)
NULL.3const: Add documentation for NULL
Reported-by: "G. Branden Robinson" <g.branden.robinson@gmail.com> Cc: Ralph Corderoy <ralph@inputplus.co.uk> Cc: Ingo Schwarze <schwarze@usta.de> Cc: Jakub Wilk <jwilk@jwilk.net> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
-rw-r--r--man3const/NULL.3const74
1 files changed, 74 insertions, 0 deletions
diff --git a/man3const/NULL.3const b/man3const/NULL.3const
new file mode 100644
index 000000000..44dda1d64
--- /dev/null
+++ b/man3const/NULL.3const
@@ -0,0 +1,74 @@
+.\" Copyright (c) 2022 by Alejandro Colomar <colomar.6.4.3@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\"
+.TH NULL 3const 2022-07-22 Linux "Linux Programmer's Manual"
+.SH NAME
+NULL \- null pointer constant
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.nf
+.B #include <stddef.h>
+.PP
+.B "#define NULL ((void *) 0)"
+.fi
+.SH DESCRIPTION
+.B NULL
+represents a null pointer constant,
+that is, a pointer that does not point to anything.
+.SH CONFORMING TO
+C99 and later;
+POSIX.1-2001 and later.
+.SH NOTES
+The following headers also provide
+.BR NULL :
+.IR <locale.h> ,
+.IR <stdio.h> ,
+.IR <stdlib.h> ,
+.IR <string.h> ,
+.IR <time.h> ,
+.IR <unistd.h> ,
+and
+.IR <wchar.h> .
+.SH CAVEATS
+It is undefined behavior to dereference a null pointer,
+and that usually causes a segmentation fault in practice.
+.PP
+It is also undefined behavior to perform pointer arithmetic on it.
+.PP
+.I NULL \- NULL
+is undefined behavior, according to ISO C, but is defined to be 0 in C++.
+.PP
+To avoid confusing human readers of the code,
+do not compare pointer variables to
+.BR 0 ,
+and do not assign
+.B 0
+to them.
+Instead, always use
+.BR NULL .
+.PP
+.B NULL
+shouldn't be confused with
+.BR NUL ,
+which is an
+.BR ascii (7)
+character,
+represented in C as
+.BR \(aq\e0\(aq .
+.SH BUGS
+When it is necessary to set a pointer variable to a null pointer,
+it is not enough to use
+.BR memset (3)
+to zero the pointer
+(this is usually done when zeroing a struct that contains pointers),
+since ISO C and POSIX don't guarantee that a bit pattern of all 0s
+represent a null pointer.
+See the EXAMPLES section in
+.BR getaddrinfo (3)
+for an example program that does this correctly.
+.SH SEE ALSO
+.BR void (3type)