[TUHS] reviving a bit of WWB

Norman Wilson norman at oclsc.org
Mon Sep 21 09:00:57 AEST 2020


Doug McIlroy:

  To put it more strongly. this is not a legal C source file.
          char *s = NULL;
  But this is.
          char *s = 0;

Clem Cole:

   67)The macro NULL is defined in <stddef.h> (and other headers) as a null
   pointer constant; see 7.19.

====

$ cat null.c
char *s = NULL;
$ cat zero.c
char *s = 0;
$

zero.c is a legal C program.  null.c is not.  Create
files exactly as shown and compile them if you don't
believe me.

Prepend `#include <stddef.h>' (or <stdlib.h> or <stdio.h>)
to null.c and it becomes legal, but I think that's Doug's
point: you need an include file.

Personally I prefer to use NULL instead of 0 when spelling
out a null pointer, because I think it's clearer:
	if ((buf = malloc(SIZE)) == NULL)
		error("dammit andrew");
though I am willing to omit it when there's no confusion
about = vs ==:
	if (*p)
		dammit(*p, "andrew");

But that's just a question of style, and Doug's is fine too.

The language does not require the compiler to pre-define
NULL or to recognize it as a keyword; you have to include
an appropriate standard header file.

Norman Wilson
Toronto ON (not 0N nor NULLN)


More information about the TUHS mailing list