Salut,
c'est juste pour savoir si il y a une difference en C++ entre NULL et 0
ex:
desolé si la question a deja été posé.Code:
1
2
3
4
5 int* pi; ... if( pi== 0) ; // if( pi == NULL);
Merci
Ben
Version imprimable
Salut,
c'est juste pour savoir si il y a une difference en C++ entre NULL et 0
ex:
desolé si la question a deja été posé.Code:
1
2
3
4
5 int* pi; ... if( pi== 0) ; // if( pi == NULL);
Merci
Ben
Aucune différence, les deux sont équivalents, mais NULL est plus correct je dirais, du moins pour relire le code et le comprendre :D
Car des tests avec des valeurs à 0 peut parfois intervenir dans d'autres contextes.
en fait, la definition de NULL depend des implementations.
on peut retrouver
#define NULL 0
comme on peut trouver
#define NULL (void*)0
donc, ca peut etre soit un entier, soit un pointeur.
Je me rappelle vaguement de ça en effet, ça n'est pas plutot une chose lié au C plutot qu'au C++ ?
Si je me rappelle bien, ça implique en effet un problème de paramètres et de prototypes.. Mais là je n'en sais plus trop rien :D
en C++, on a toujours #define NULL 0
Mais pour un pointeur, c'est beaucoup plus lisible (pour l'utilisateur) de voir NULL dans le code plutôt que zéro (qu'on peut alors réserver aux vrais nombres).
C'est comme pour le caractère nul: généralement, '\0' est égal à zéro (si ça se trouve, c'est pas le cas partout, aucun idée) mais quand on lit '\0' on sait tout de suite qu'on parle d'un caractère et non d'une valeur simple ou d'un pointeur...
Non. On peut avoir aussi #define NULL 0L ou n'importe quelle expression entiere de valeur 0, par exemple (comme gcc) #define NULL __null et l'utilisation de __null dans un contexte autre que pointeur -- au hasard comme ca, comme argument d'une fonction a nombre variable d'arguments -- donnant un warning (mais se comportant autrement comme 0). Mais cette remarque est du pinaillage.Citation:
Envoyé par Médinoc
C'est ma position aussi, mais certains et non des moindres preferent utiliser 0 (a commencer par B.S. si j'ai bonne memoire).Citation:
Mais pour un pointeur, c'est beaucoup plus lisible (pour l'utilisateur) de voir NULL dans le code plutôt que zéro (qu'on peut alors réserver aux vrais nombres).
'\0' est toujours egal a (char)0.Citation:
C'est comme pour le caractère nul: généralement, '\0' est égal à zéro (si ça se trouve, c'est pas le cas partout, aucun idée) mais quand on lit '\0' on sait tout de suite qu'on parle d'un caractère et non d'une valeur simple ou d'un pointeur...
En C effectivement on peut avoir NULL definit comme (void*)0.Citation:
Envoyé par KiLVaiDeN
Dans les parametres des fonctions a nombre variables d'arguments (et ceux des fonctions sans prototype en C -- il n'y en a pas en C++) 0 est passe comme un entier; hors la convention de passage d'un entier peut ne pas etre celle d'un pointeur (exemple certains modeles de compilation sous DOS ont des entiers sur 16 bits et des pointeurs sur 32 bits), avoir alors NULL definit comme en C++ laisse l'impression qu'il s'agit d'un pointeur mais il est bien compris comme un entier. En C, la situation est pire parce qu'en plus pour la meme cible le meme code fonctionnera ou pas suivant le compilateur et la maniere dont il definit NULL...Citation:
Si je me rappelle bien, ça implique en effet un problème de paramètres et de prototypes.. Mais là je n'en sais plus trop rien :D