Path: utzoo!attcan!uunet!ora!minya!jc From: jc@minya.UUCP (John Chambers) Newsgroups: comp.lang.c Subject: What C compilers have non-zero null pointers? Message-ID: <422@minya.UUCP> Date: 8 Jul 90 14:14:25 GMT Lines: 42 After following a bit of debate in another newsgroup concerning dereferencing null pointers, I've become curious as to how various C compilers actually represent null pointers. I've never actually seen a C compiler that uses anything other than all 0 bits for a null pointer, but some people insist that this is quite common (and I'm a total idiot for not knowing it ;-). Now, I've known for some time that all-zeroes wasn't the *required* representation of a null pointer, but I also understand why it's the obvious one. Consider that the C bible (page 192) says, concerning assignments to/from pointers and other types, "The assignment is a pure copy operation, with no conversion." This means that in: int i; char*p; i = 0; p = i; the value assigned to p is the same bit pattern as i (which needs to be long on some machines, of course). Now, I've never even heard of a C compiler that uses anything other than all zeroes for an int (or long) 0, so it seems to my naive little mind that p must be all zeroes, also. Of course, the manual doesn't quite say anywhere that the above code gives p the same value as p = 0; though I sorta expect that most programmers would be surprised if the values were different. Anyhow, what's the story here? Are there really C compilers that use something other than all-zero bits for a null pointer? If so, can you name the compilers, and describe their representations and how they handle code like the above? This seems like it could be the source of a lot of fun portability problems. Any insights here? [It seems to me that it'd be useful if there were a compiler option to specify the representation of null pointers, but that's probably far too much to hope for... :-] -- Typos and silly ideas Copyright (C) 1990 by: Uucp: ...!{harvard.edu,ima.com,eddie.mit.edu,ora.com}!minya!jc (John Chambers) Home: 1-617-484-6393 Work: 1-508-952-3274