2012-08-23 14 views

risposta

8

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.

4

C'è qualche vantaggio di fusione NULL ad un puntatore struct in C

Non ce n'è. Dovrebbe essere semplice:

List *listPtr = NULL; 

Inoltre, se l'oggetto ha stoccaggio statico (per esempio, come una variabile globale) non è nemmeno necessario inizializzare a NULL.

4

Nessun nullo è nullo, è nullo come si può ottenere, si potrebbe pensare che zero sia nullo ma che è solo noccioline rispetto a null.

+1

Ancora alcuni fan HHGTTG ​​in questa nuova generazione quindi ;-) –

+0

oh, no, sfortunatamente no. 'sizeof (NULL)' può variare da '1' a' 8' a seconda di come 'NULL' è definito. –

+0

@JensGustedt è solo la rappresentazione di NULL nel nostro universo. –

Problemi correlati