Is there any benefit of casting NULL to a struct pointer in C ?
For example:
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
Example from PostgreSQL source:
#define NIL ((List *) NULL)
http://doxygen.postgresql.org/pg__list_8h_source.html
In assignment example the explicit cast make no useful sense. However, it seems that you the question is really about #define NIL ((List *) NULL)
macro, whose usability extends beyond assignment.
One place where it might make sense is when you pass it to a variadic function or to a function declared without a prototype. The standard NULL
can be defined as0
or 0L
or ((void *) 0)
or in some other way, meaning that it might be interpreted differently in such type-less contexts. An explicit cast will make sure that it is interpreted correctly as a pointer.
For example, this is generally invalid (behavior is undefined)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
while replacing the call with
foo(NIL);
makes it valid.
Is there any benefit of casting NULL to a struct pointer in C
There's none. It should be simply:
List *listPtr = NULL;
Moreover, if the object has static storage (say, like a global variable) you don't even need to initialize it to NULL.
No null is null, it's as null as you can get, you might think zero is pretty null but that's just peanuts compared to null.