>>35
The only way to solve this is to have typed objects. null/nil could be such an object. Something like that can be done effectively by using tag bits on each object, but then it would hardly be C anymore. If pointers are effectively unsigned integers and any unsigned integer can be potentially a valid address under the right circumstances then it's impossible to truly satisfy that ISO C requirement. That's the case for most C compilers on x86, but it doesn't have to be the case for x86_64 (you don't really need to use the whole address space = few people have that much RAM or paging files) and it's not on archs with the addresses being smaller than the registers(a pointer can be tagged. Lisp Machines did it that way and some older archs did it too, but that's not say it's the most efficient way to do things, as type checks in hardware can be costly, and they change the whole arch around).