### Question 5.9

If `NULL` and `0` are equivalent as null pointer constants, which should I use?

Many programmers believe that `NULL` should be used in all pointer contexts, as a reminder that the value is to be thought of as a pointer. Others feel that the confusion surrounding `NULL` and `0` is only compounded by hiding `0` behind a macro, and prefer to use unadorned `0` instead. There is no one right answer. (See also questions 9.2 and 17.10.) C programmers must understand that `NULL` and `0` are interchangeable in pointer contexts, and that an uncast `0` is perfectly acceptable. Any usage of `NULL` (as opposed to `0`) should be considered a gentle reminder that a pointer is involved; programmers should not depend on it (either for their own understanding or the compiler's) for distinguishing pointer `0`'s from integer `0`'s.

`NULL` should not be used when another kind of `0` is required, even though it might work, because doing so sends the wrong stylistic message. (Furthermore, ANSI allows the definition of `NULL` to be `((void *)0)`, which will not work at all in non-pointer contexts.) In particular, do not use `NULL` when the ASCII null character (NUL) is desired. Provide your own definition

    	#define NUL '\0'

if you must.

References: K&R1 Sec. 5.4 pp. 97-8
K&R2 Sec. 5.4 p. 102

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback