Posté par 007 .
En réponse au journal J'adore Linus.
Évalué à 5.
Juste aussi une petit précision.
Globalement ça rend le code plus lisible.
Mais dans certains cas on ne peut pas utiliser '0' à la place de 'NULL'.
Typiquement les fonctions avec un nombre variable de paramètres (traité avec varargs).
toto("coucou : %p, %s\n", 0, "tralala") ;
est différent de :
toto("coucou : %p, %s\n", NULL, "tralala") ; # NULL ou "(void *)0"
Avec '0', sur la pile il y a :
- char *
- int
- char *
alors que la fonction toto() fait comme s'il y avait :
- char *
- void *
- char *
Si sizeof(int) != sizeof(void *) (typiquement le cas sur machine 64 bits), des problèmes sont à prévoir.
J'ai ignoré la promotion faite en C mais pas en C++.
[^] # Re: Petites precisions
Posté par 007 . En réponse au journal J'adore Linus. Évalué à 5.
Globalement ça rend le code plus lisible.
Mais dans certains cas on ne peut pas utiliser '0' à la place de 'NULL'.
Typiquement les fonctions avec un nombre variable de paramètres (traité avec varargs).
toto("coucou : %p, %s\n", 0, "tralala") ;
est différent de :
toto("coucou : %p, %s\n", NULL, "tralala") ; # NULL ou "(void *)0"
Avec '0', sur la pile il y a :
- char *
- int
- char *
alors que la fonction toto() fait comme s'il y avait :
- char *
- void *
- char *
Si sizeof(int) != sizeof(void *) (typiquement le cas sur machine 64 bits), des problèmes sont à prévoir.
J'ai ignoré la promotion faite en C mais pas en C++.