En el ejemplo de asignación de la conversión explícita no tienen sentido útil. Sin embargo, parece que la pregunta es realmente acerca de #define NIL ((List *) NULL)
macro, cuya usabilidad se extiende más allá de la asignación.
Un lugar donde podría tener sentido es cuando se pasa a una función variadic oa una función declarada sin un prototipo. El estándar NULL
se puede definir como 0
o 0L
o ((void *) 0)
o de alguna otra manera, lo que significa que podría interpretarse de forma diferente en tales contextos de tipo menos. Un lanzamiento explícito se asegurará de que se interprete correctamente como un puntero.
Por ejemplo, este es generalmente válido (comportamiento no está definido)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
mientras que la sustitución de la llamada con
foo(NIL);
hace que sea válida.
esto no tiene ningún sentido para mí. Puede asignar NULL a cualquier puntero sin ningún molde. –