Posté par 007 .
En réponse au journal J'adore Linus.
Évalué à 0.
> Pas du C, on ne peut pas additionner deux pointeurs.
Oui on peut (même si généralement c'est une très mauvaise idée). Il faut qu'il soit du même type et pas du type void* .
> > Ça n'a pas la même signification qu'avec les autres types.
> Si c'est pareil, on compare p avec 0
J'ai dis "signification".
Sur l'aspect signification, ce n'est pas la même chose.
p = 0 // adresse 0
p = NULL // adresse invalide ou non renseigné, etc
Si à NULL tu lui donne la signification de '0', effectivement c'est la même c'est la même signification :-).
Mais la "notation" NULL est bien là pour différencier de '0'.
'0' indique 'rien'. Pas de patates cette semaine, 0 Francs de solde sur le compte. Mais NULL en solde sur le compte j'ai pas encore vu ça :-) Ou alors on veux indisquer que le compte est NULL (invalide ou n'existe pas). Dans ce cas c'est compte = NULL et non pas solde = NULL.
Beaucoup de language font la distinction entre NULL et 0. Par exemple SQL (limite casse couille leur convention) et php (qui ajoute aussi la distinction set/unset puisque qu'il n'y a pas de déclaration de variable).
Avec php (j'ai un peu oublié la syntax) :
isnull(toto) => false ; toto n'est pas défini
toto = NULL
if (toto) => erreur/warning, on ne peut pas évaluer
toto == 0 => false ; toto est à NULL et pas à '0'
toto = 0
isnull(toto) => false ; toto n'est pas NULL, mais à '0'
Le C est un peu particulier. Il n'y a que les adresses qui peuvent être NULL (toujours sur l'aspect signification) et tu peux aussi utiliser l'adresse 0 (pour faire un reset ou d'autre truc de très bas niveau). Il n'y a pas de int/float/etc NULL. Ceci pour des raisons de performances sinon il faut vérifier à l'exécution. Un int/float/etc a toujours une valeur valide (sauf pour float avec certain librairie de calcul si on chipote).
[^] # Re: Petites precisions
Posté par 007 . En réponse au journal J'adore Linus. Évalué à 0.
Oui on peut (même si généralement c'est une très mauvaise idée). Il faut qu'il soit du même type et pas du type void* .
> > Ça n'a pas la même signification qu'avec les autres types.
> Si c'est pareil, on compare p avec 0
J'ai dis "signification".
Sur l'aspect signification, ce n'est pas la même chose.
p = 0 // adresse 0
p = NULL // adresse invalide ou non renseigné, etc
Si à NULL tu lui donne la signification de '0', effectivement c'est la même c'est la même signification :-).
Mais la "notation" NULL est bien là pour différencier de '0'.
'0' indique 'rien'. Pas de patates cette semaine, 0 Francs de solde sur le compte. Mais NULL en solde sur le compte j'ai pas encore vu ça :-) Ou alors on veux indisquer que le compte est NULL (invalide ou n'existe pas). Dans ce cas c'est compte = NULL et non pas solde = NULL.
Beaucoup de language font la distinction entre NULL et 0. Par exemple SQL (limite casse couille leur convention) et php (qui ajoute aussi la distinction set/unset puisque qu'il n'y a pas de déclaration de variable).
Avec php (j'ai un peu oublié la syntax) :
isnull(toto) => false ; toto n'est pas défini
toto = NULL
if (toto) => erreur/warning, on ne peut pas évaluer
toto == 0 => false ; toto est à NULL et pas à '0'
toto = 0
isnull(toto) => false ; toto n'est pas NULL, mais à '0'
Le C est un peu particulier. Il n'y a que les adresses qui peuvent être NULL (toujours sur l'aspect signification) et tu peux aussi utiliser l'adresse 0 (pour faire un reset ou d'autre truc de très bas niveau). Il n'y a pas de int/float/etc NULL. Ceci pour des raisons de performances sinon il faut vérifier à l'exécution. Un int/float/etc a toujours une valeur valide (sauf pour float avec certain librairie de calcul si on chipote).