2012-08-23 19 views

Respuesta

8

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.

4

¿Hay algún beneficio de NULL de colada a un puntero struct en C

No hay ninguno. Debería ser simplemente:

List *listPtr = NULL; 

Por otra parte, si el objeto tiene almacenamiento estático (por ejemplo, como una variable global) que ni siquiera necesita para inicializar a NULL.

4

No null es nulo, es tan nulo como usted puede conseguir, se podría pensar que el cero es bastante nula, pero eso es sólo los cacahuetes en comparación con nula.

+1

todavía algunos aficionados HHGTTG ​​en esta nueva generación que entonces ;-) –

+0

oh, no, lamentablemente no. 'sizeof (NULL)' puede variar de '1' a' 8' dependiendo de cómo se define 'NULL'. –

+0

@JensGustedt es solo la representación de NULL en nuestro universo. –

Cuestiones relacionadas