Nell'esempio di assegnazione il cast esplicito non ha alcun senso. Tuttavia, sembra che la domanda riguardi davvero la macro #define NIL ((List *) NULL)
, la cui usabilità si estende oltre l'assegnazione.
Un luogo in cui potrebbe avere senso è quando lo si passa a una funzione variadica oa una funzione dichiarata senza un prototipo. Lo standard NULL
può essere definito come 0
o 0L
o ((void *) 0)
o in un altro modo, il che significa che potrebbe essere interpretato in modo diverso in tali contesti senza caratteri. Un cast esplicito farà in modo che sia interpretato correttamente come un puntatore.
Ad esempio, questo è generalmente valida (comportamento è indefinito)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
durante la sostituzione della chiamata con
foo(NIL);
rende valido.
Questo non ha alcun senso per me. Puoi assegnare NULL a qualsiasi puntatore senza cast. –