Null object: Difference between revisions

Content added Content deleted
(→‎{{header|C}}: These header files define NULL.)
(→‎{{header|C}}: Move a sentence from Undefined values#C that fits better here.)
Line 96: Line 96:
Classic BASIC does have the concept of un-initialised or undefined variables.
Classic BASIC does have the concept of un-initialised or undefined variables.
=={{header|C}}==
=={{header|C}}==
C has the null pointer. By convention, it points to memory address zero. There is a very common macro, <code>NULL</code>, which evaluates to <code>(void*) 0</code> or an equivalent value. NULL is compatible with all pointer types, including both data pointers and function pointers.
C has the null pointer. By convention, it points to memory address zero. It is (supposedly) garanteed to be pointing to nothing, so receiving one of those likely means you are not looking at an object--<i>but</i>, there are occasions where changing content of a null pointer actually does something (say, on DOS); and a function that's supposed to return a pointer on success doesn't always return a 0 otherwise (e.g. mmap returns -1 for failure).

There is a very common macro, <code>NULL</code>, which evaluates to <code>(void*) 0</code> or an equivalent value. NULL is compatible with all pointer types, including both data pointers and function pointers.


The standard library defines NULL in locale.h, stddef.h, stdio.h, stdlib.h, string.h, time.h and wchar.h. [[POSIX]] systems also define NULL in dirent.h and unistd.h. Many C files include at least one of these headers, so NULL is almost always available.
The standard library defines NULL in locale.h, stddef.h, stdio.h, stdlib.h, string.h, time.h and wchar.h. [[POSIX]] systems also define NULL in dirent.h and unistd.h. Many C files include at least one of these headers, so NULL is almost always available.