NULL v. zero
[Posted July 14, 2004 by corbet]
Back in June, this page
looked at
the sparse utility, which is being used to search out various
kinds of errors in the kernel code base. Recently, large numbers of
patches have gone in to address one particular
sparse complaint:
using an integer
0 to represent a null pointer value. These
patches (
example) have struck some
developers as useless code churn, leading to
complaints like:
If you want people to conform people to a certain CodingStyle
please document officially in the kernel, sparse isn't distributed
with the kernel and the sparse police is silently changing the
kernel all over the place with sometimes questionable benefit. Only
the __user warnings had really found the bugs, but the rest I've
seen changes perfectly legal code.
Linus responds that programmers who
interchange NULL and zero are confused about the types they are
using and are putting that confusion into the kernel. In his desire to
enable the compiler (and other compile-time checkers) to find errors, he
wants to separate the integer and pointer types as completely as possible.
NULL is a pointer, while 0 can never be.
In other words:
char * p = 0; /* IS WRONG! DAMMIT! */
int i = NULL; /* THIS IS WRONG TOO! */
and anybody who writes code like the above either needs to get out of the
kernel, or needs to get transported to the 21st century.
One might conclude from this statement that Linus is pretty well convinced
that the current course of action is correct. He also states that, without exception, changing zero
to NULL has resulted in better, more readable code. So use of
NULL seems to have become part of the official kernel coding
style, even if the CodingStyle document is
still silent on the matter.
(
Log in to post comments)