[c++] signification du NULL ?

signification du NULL ? [c++] - C++ - Programmation

Marsh Posté le 02-04-2003 à 15:46:03    

à quoi sert le nul, par exemple dans une boucle  

Citation :


if(i==NULL){..}

Reply

Marsh Posté le 02-04-2003 à 15:46:03   

Reply

Marsh Posté le 02-04-2003 à 15:46:57    

#define NULL 0

Reply

Marsh Posté le 02-04-2003 à 15:49:10    

ok merci

Reply

Marsh Posté le 02-04-2003 à 15:59:04    

chrisbk a écrit :

#define NULL 0
 


 
:heink:
 
Si tu fais ca texto, il me semble que ca ne marche pas avec tous les compilos ... (Visual fait la gueule ... :D)
 
Mais dans le principe, c'est vrai que c'est 0


---------------
last.fm
Reply

Marsh Posté le 02-04-2003 à 16:07:22    

g++ fait aussi la gueule, en fait je crois que NULL vaut par defaut la valeur 0, j'ai bon ?

Reply

Marsh Posté le 02-04-2003 à 16:07:45    

theShOcKwAvE a écrit :


 
:heink:
 
Si tu fais ca texto, il me semble que ca ne marche pas avec tous les compilos ... (Visual fait la gueule ... :D)
 
Mais dans le principe, c'est vrai que c'est 0


 
ouais pe au niveau des conversions de pointeur, mais bon, c t pour l'idee :D

Reply

Marsh Posté le 02-04-2003 à 16:08:13    

donc pas besoin du #define

Reply

Marsh Posté le 02-04-2003 à 16:09:16    

?
 
ben non, c t juste pour te donner une idee de ce qu'est null !

Reply

Marsh Posté le 02-04-2003 à 16:12:14    

Oups ... Désolé ... Je crois que je sème la confusion avec mes remarques à 2 balles ...
 
Oauis ... NULL, c'est 0 ... Que tu compares à NULL ou que tu compares à 0, ca devrait revenir au même partout. Simplement, NULL est plus parlant pour ceux qui te reliront.
 
NULL signifie que tu pointes sur une zone mémoire factice, qui ne peut pas (et ne DOIT surtout pas) être utilisée pour lire ou écrire des valeurs


---------------
last.fm
Reply

Marsh Posté le 02-04-2003 à 16:13:53    

chrisbk a écrit :


 
ouais pe au niveau des conversions de pointeur, mais bon, c t pour l'idee :D
 


 
Quand je débutais, on m'avait dit que c'était :
#define NULL (void *)0
 
Et ca foire aussi ... Pourquoi tout le monde nous ment quand on débute ? :lol:
 
 
Edit : correction faute d'orthographe ... :D


Message édité par theshockwave le 02-04-2003 à 16:14:40

---------------
last.fm
Reply

Marsh Posté le 02-04-2003 à 16:13:53   

Reply

Marsh Posté le 02-04-2003 à 17:20:58    

theShOcKwAvE a écrit :


 
:heink:
 
Si tu fais ca texto, il me semble que ca ne marche pas avec tous les compilos ... (Visual fait la gueule ... :D)
 
Mais dans le principe, c'est vrai que c'est 0

c pire que le principe, c'est la définition canonique

Reply

Marsh Posté le 02-04-2003 à 17:30:20    

++Taz a écrit :

c pire que le principe, c'est la définition canonique


 
Oups ... Un gros désolé et de plates excuses à tout le monde ...
 
 
En fait,
#ifdef NULL
#undef NULL
#endif
#define NULL 0
 
 
ca marche ... :(
 
J'sais pas ce que j'avais foutu le jour où ca n'a pas marché ...
 
(Edit ... Correction smiley ...)


Message édité par theshockwave le 02-04-2003 à 17:31:16

---------------
last.fm
Reply

Marsh Posté le 02-04-2003 à 18:30:09    

de toutes façon en C++, je mets un jpli 0 et voilà

Reply

Marsh Posté le 02-04-2003 à 21:17:08    

un jpli taz ?? c quoi stp ?

Reply

Marsh Posté le 02-04-2003 à 21:39:49    

++Taz a écrit :

de toutes façon en C++, je mets un jpli 0 et voilà


:jap:
j'aime bien savoir ce qui se passe et quand je veux un zero j'écris pas autrechose:D
de toutes façons le jour où j'écrirai du code en C/C++ sur une machine où on a le droit d'allouer à l'adresse 0...

Reply

Marsh Posté le 02-04-2003 à 21:55:38    

tu crois quoi? que 0 représente un mot mémoire spécial? etc, que la valeur de pointeur est une vrai adresse en RAM? ce n'est pas le cas. encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|

Reply

Marsh Posté le 03-04-2003 à 00:46:34    

++Taz a écrit :

tu crois quoi? que 0 représente un mot mémoire spécial? etc, que la valeur de pointeur est une vrai adresse en RAM? ce n'est pas le cas. encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|


sur amiga j'ai déjà stocké un mot long (32 bits) à l'adresse 0:D
le C/C++, quand on met un zero dans un pointeur, n'empêche pas d'y accéder comme si c'était une autre valeur. Simplement sur la plupart des OS, on se fait jeter par la protection mémoire.
Ce que je veux dire, c'est que dans un environnement où l'adresse 0 est utilisable (rare), on aurait intérêt à ce que NULL ait une autre valeur qui ne peut pas exister comme pointeur. Mais à priori ça risque pas d'arriver donc autant mettre 0 à la place de NULL, c'est + lisible.


Message édité par wave le 03-04-2003 à 00:48:48
Reply

Marsh Posté le 03-04-2003 à 07:28:17    

++Taz a écrit :

ce n'est pas le cas. encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|

Reply

Marsh Posté le 03-04-2003 à 07:35:07    

wave a écrit :


Simplement sur la plupart des OS, on se fait jeter par la protection mémoire.


encore heureux :o
 
sur x86/MSDOS c'est la table des interruptions à cette adresse.  Seulement je sais pas si c'est spécifique à l'OS ou à la plate-forme x86 [:meganne]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 03-04-2003 à 18:44:40    

++Taz a écrit :

encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|


je sais pas ce que tu entends par 'canonique'.
mais sur une machine sans mémoire virtuelle, où les pointeurs représentent l'adresse réelle, un pointeur à 0 pointera sur l'adresse physique 0.

Reply

Marsh Posté le 04-04-2003 à 06:09:39    

wave a écrit :


je sais pas ce que tu entends par 'canonique'.
mais sur une machine sans mémoire virtuelle, où les pointeurs représentent l'adresse réelle, un pointeur à 0 pointera sur l'adresse physique 0.


 
oui mais malheureusement il n'est pas requis que l'adresse pointée par le pointeur "null" soit une adresse invalide, de même qu'il n'est pas requis que le système trappe les déférencements de pointeurs "null".
Par contre il est requis par le C++ que l'assignement du litteral "zero (0)" à un pointeur, soit considéré comme une initialisation à "null" et que toute comparaison ultérieur de ce pointeur au littéral "zero (0)" retourne true.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 04-04-2003 à 17:56:12    

legreg a écrit :


 
oui mais malheureusement il n'est pas requis que l'adresse pointée par le pointeur "null" soit une adresse invalide, de même qu'il n'est pas requis que le système trappe les déférencements de pointeurs "null".
Par contre il est requis par le C++ que l'assignement du litteral "zero (0)" à un pointeur, soit considéré comme une initialisation à "null" et que toute comparaison ultérieur de ce pointeur au littéral "zero (0)" retourne true.
 
LeGreg


encore heureux qu'un 0==0 retourne 'true' :D

Reply

Marsh Posté le 04-04-2003 à 18:02:18    

est dans le cas d'un pointeur far en mode protégé ?
avec segment::offset en 16:32 bits, si on fait ptr=NULL, ça doit mettre que l'offset à 0 non ?

Reply

Marsh Posté le 04-04-2003 à 18:19:08    

BJOne a écrit :

est dans le cas d'un pointeur far en mode protégé ?
avec segment::offset en 16:32 bits, si on fait ptr=NULL, ça doit mettre que l'offset à 0 non ?


je sais pas comment ça marche (j'ai pas touché au PC avant que cette mauvaise période soit finie:D).
dans ce mode t'arrives à allouer un bloc de + de 64Ko?
si oui, on peut supposer que le compilo gère pas seulement l'offset, sinon ça doit être juste l'offset.
tu peux tenter un sizeof sur le pointeur, ça peut donner un indice.

Reply

Marsh Posté le 05-04-2003 à 17:20:39    

nan, je parles pas du mode réel...
 
sous windows, tu peux très bien (enfin il me semble fo demander au kernel) avoir plusieurs segments de donnée, et donc maintenir tes objets par un pointeur far (16:32).

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed