NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
NULL n'etant pas defini en C++ ? (bizare)
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
NULL n'etant pas defini en C++ ? (bizare)
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
NULL n'etant pas defini en C++ ? (bizare)
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
PS: je viens de JAVA et cela me choque :(
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
PS: je viens de JAVA et cela me choque :(
NULL n'etant pas defini en C++ ? (bizare)
dans un header Global.h j'ai
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
PS: je viens de JAVA et cela me choque :(
NULL n'etant pas defini en C++ ? (bizare)
Utilises 0.
dans un header Global.h j'ai
const int NULL = 0;
Il faudrait #define NULL 0
NULL n'etant pas defini en C++ ? (bizare)
Utilises 0.
dans un header Global.h j'ai
const int NULL = 0;
Il faudrait #define NULL 0
NULL n'etant pas defini en C++ ? (bizare)
Utilises 0.
dans un header Global.h j'ai
const int NULL = 0;
Il faudrait #define NULL 0
NULL n'etant pas defini en C++ ? (bizare)
Le C++ définit ce qu'est un "null pointer constant", et il le
définit comme étant une valeur entière constante comparée
égale à 0. Donc une bonne définition de NULL en C++ est celle
donnée en dessous. (4.10 dans la norme)
[ En fait, d'après la norme et le paragraphe en question, on
peut mettre const int NULL = 0; ou const int NULL = 0L; si
j'ai tout bien compris ].
À noter que NULL n'est qu'une macro en C aussi. C'est pas un
mot clé du C. (ce que pourrait laisser penser la phrase avec
le bizarre que NULL ne soit pas définit en C++) À noter aussi
que la version C de la macro ((void*)0)
est interdite du fait que la conversion de void* -> T* doit
être explicitement demandée, tout utilisateur de malloc() & co
en C++ l'aura remarqué.
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
Deux choses :
- d'une part en C++ je pense qu'il est préférable de mettre 0
partout. (c'est une question de gout, un long débat sur les
groupes anglophones, et ca fait aussi une ligne dans TC++PL)
- Cette version devrait compiler sans problème et sans
warning.
En effet, la conversion est autorisée par la norme, et elle
est sûre. Quelle est la version du compilateur utilisé ? En
tout cas, Comeau Online me confirme que c'est autorisé :
const int NULL = 0;
class RxMove {
int a;
};
int main() {
RxMove* a = new RxMove;
if(NULL == a)
return -1;
else {
delete(a);
return 0;
}
}
Thank you for testing your code with Comeau C/C++!
Tell others about http://www.comeaucomputing.com/tryitout !
Your Comeau C/C++ test results are as follows:
Comeau C/C++ 4.3.0.1 (Aug 20 2002 15:39:28) for ONLINE_EVALUATION_BETA1
Copyright 1988-2002 Comeau Computing. All rights reserved.
MODE:strict errors C++
In strict mode, with -tused, Compile succeeded (but remember,
the Comeau online compiler does not link).
NULL n'etant pas defini en C++ ? (bizare)
Le C++ définit ce qu'est un "null pointer constant", et il le
définit comme étant une valeur entière constante comparée
égale à 0. Donc une bonne définition de NULL en C++ est celle
donnée en dessous. (4.10 dans la norme)
[ En fait, d'après la norme et le paragraphe en question, on
peut mettre const int NULL = 0; ou const int NULL = 0L; si
j'ai tout bien compris ].
À noter que NULL n'est qu'une macro en C aussi. C'est pas un
mot clé du C. (ce que pourrait laisser penser la phrase avec
le bizarre que NULL ne soit pas définit en C++) À noter aussi
que la version C de la macro ((void*)0)
est interdite du fait que la conversion de void* -> T* doit
être explicitement demandée, tout utilisateur de malloc() & co
en C++ l'aura remarqué.
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
Deux choses :
- d'une part en C++ je pense qu'il est préférable de mettre 0
partout. (c'est une question de gout, un long débat sur les
groupes anglophones, et ca fait aussi une ligne dans TC++PL)
- Cette version devrait compiler sans problème et sans
warning.
En effet, la conversion est autorisée par la norme, et elle
est sûre. Quelle est la version du compilateur utilisé ? En
tout cas, Comeau Online me confirme que c'est autorisé :
const int NULL = 0;
class RxMove {
int a;
};
int main() {
RxMove* a = new RxMove;
if(NULL == a)
return -1;
else {
delete(a);
return 0;
}
}
Thank you for testing your code with Comeau C/C++!
Tell others about http://www.comeaucomputing.com/tryitout !
Your Comeau C/C++ test results are as follows:
Comeau C/C++ 4.3.0.1 (Aug 20 2002 15:39:28) for ONLINE_EVALUATION_BETA1
Copyright 1988-2002 Comeau Computing. All rights reserved.
MODE:strict errors C++
In strict mode, with -tused, Compile succeeded (but remember,
the Comeau online compiler does not link).
NULL n'etant pas defini en C++ ? (bizare)
Le C++ définit ce qu'est un "null pointer constant", et il le
définit comme étant une valeur entière constante comparée
égale à 0. Donc une bonne définition de NULL en C++ est celle
donnée en dessous. (4.10 dans la norme)
[ En fait, d'après la norme et le paragraphe en question, on
peut mettre const int NULL = 0; ou const int NULL = 0L; si
j'ai tout bien compris ].
À noter que NULL n'est qu'une macro en C aussi. C'est pas un
mot clé du C. (ce que pourrait laisser penser la phrase avec
le bizarre que NULL ne soit pas définit en C++) À noter aussi
que la version C de la macro ((void*)0)
est interdite du fait que la conversion de void* -> T* doit
être explicitement demandée, tout utilisateur de malloc() & co
en C++ l'aura remarqué.
const int NULL = 0;
la ou j'utilise NULL j'ai un warning :
invalid conversion from `int' to `RXMove*' qui me parait normal
comment faire?
Deux choses :
- d'une part en C++ je pense qu'il est préférable de mettre 0
partout. (c'est une question de gout, un long débat sur les
groupes anglophones, et ca fait aussi une ligne dans TC++PL)
- Cette version devrait compiler sans problème et sans
warning.
En effet, la conversion est autorisée par la norme, et elle
est sûre. Quelle est la version du compilateur utilisé ? En
tout cas, Comeau Online me confirme que c'est autorisé :
const int NULL = 0;
class RxMove {
int a;
};
int main() {
RxMove* a = new RxMove;
if(NULL == a)
return -1;
else {
delete(a);
return 0;
}
}
Thank you for testing your code with Comeau C/C++!
Tell others about http://www.comeaucomputing.com/tryitout !
Your Comeau C/C++ test results are as follows:
Comeau C/C++ 4.3.0.1 (Aug 20 2002 15:39:28) for ONLINE_EVALUATION_BETA1
Copyright 1988-2002 Comeau Computing. All rights reserved.
MODE:strict errors C++
In strict mode, with -tused, Compile succeeded (but remember,
the Comeau online compiler does not link).
Ça choque beaucoup de gens, je crois. Mais ça fait partie de
l'héritage C.
Ça choque beaucoup de gens, je crois. Mais ça fait partie de
l'héritage C.
Ça choque beaucoup de gens, je crois. Mais ça fait partie de
l'héritage C.
Anthony Fleury wrote:Le C++ définit ce qu'est un "null pointer constant", et il le
définit comme étant une valeur entière constante comparée
égale à 0. Donc une bonne définition de NULL en C++ est celle
donnée en dessous. (4.10 dans la norme)
Sauf que l'utilisateur n'a pas le droit de le faire, dès qu'il a
inclu un parmi un certain nombre d'en-têtes.
[ En fait, d'après la norme et le paragraphe en question, on
peut mettre const int NULL = 0; ou const int NULL = 0L; si
j'ai tout bien compris ].
Selon la norme, NULL doit être 1) un macro, 2) défini dans des
en-têtes standard, et 3) évalué à une constante de pointeur nul
(qui malgré son nom, doit avoir un type entier, et non un type
pointeur).
est interdite du fait que la conversion de void* -> T* doit
être explicitement demandée, tout utilisateur de malloc() & co
en C++ l'aura remarqué.
Je ne comprends pas trop ta phrase, ni son rapport avec NULL.
Sauf en ce qui concerne les formes permises, la définition de
NULL et des constantes de pointeur nul est identique en C et en
C++.
Deux choses :
- d'une part en C++ je pense qu'il est préférable de mettre 0
partout. (c'est une question de gout, un long débat sur les
groupes anglophones, et ca fait aussi une ligne dans TC++PL)
Ça dépend de ton style de programmation et du compilateur dont
tu te sers. Fais-toi la règle que si le code ne se compile pas
avec g++ sans avertissements, il est incorrect, et NULL n'a que
des avantages par rapport à zéro.
- Cette version devrait compiler sans problème et sans
warning.
Ça dépend de ce qu'il a inclu avant. Si après l'expansion du
macro, le compilateur voit :
const int 0 = 0 ;
il risque de ne pas être content. Je ne crois pas que ça
explique le comportement qu'il a vu, mais il reste que sa
déclaration donne un comportement indéfini dès qu'il inclut
certains en-têtes.
Sans voir le contexte complet de ton problème, c'est difficile à
dire. La solution préférée, c'est d'inclure <stddef.h> en tête,
et de se servir du NULL défini là (ou de s'en passer
complètement, et écrire 0 -- selon le compilateur, ton style de
programmation, et les conventions en vigueur où tu travailles).
Anthony Fleury wrote:
Le C++ définit ce qu'est un "null pointer constant", et il le
définit comme étant une valeur entière constante comparée
égale à 0. Donc une bonne définition de NULL en C++ est celle
donnée en dessous. (4.10 dans la norme)
Sauf que l'utilisateur n'a pas le droit de le faire, dès qu'il a
inclu un parmi un certain nombre d'en-têtes.
[ En fait, d'après la norme et le paragraphe en question, on
peut mettre const int NULL = 0; ou const int NULL = 0L; si
j'ai tout bien compris ].
Selon la norme, NULL doit être 1) un macro, 2) défini dans des
en-têtes standard, et 3) évalué à une constante de pointeur nul
(qui malgré son nom, doit avoir un type entier, et non un type
pointeur).
est interdite du fait que la conversion de void* -> T* doit
être explicitement demandée, tout utilisateur de malloc() & co
en C++ l'aura remarqué.
Je ne comprends pas trop ta phrase, ni son rapport avec NULL.
Sauf en ce qui concerne les formes permises, la définition de
NULL et des constantes de pointeur nul est identique en C et en
C++.
Deux choses :
- d'une part en C++ je pense qu'il est préférable de mettre 0
partout. (c'est une question de gout, un long débat sur les
groupes anglophones, et ca fait aussi une ligne dans TC++PL)
Ça dépend de ton style de programmation et du compilateur dont
tu te sers. Fais-toi la règle que si le code ne se compile pas
avec g++ sans avertissements, il est incorrect, et NULL n'a que
des avantages par rapport à zéro.
- Cette version devrait compiler sans problème et sans
warning.
Ça dépend de ce qu'il a inclu avant. Si après l'expansion du
macro, le compilateur voit :
const int 0 = 0 ;
il risque de ne pas être content. Je ne crois pas que ça
explique le comportement qu'il a vu, mais il reste que sa
déclaration donne un comportement indéfini dès qu'il inclut
certains en-têtes.
Sans voir le contexte complet de ton problème, c'est difficile à
dire. La solution préférée, c'est d'inclure <stddef.h> en tête,
et de se servir du NULL défini là (ou de s'en passer
complètement, et écrire 0 -- selon le compilateur, ton style de
programmation, et les conventions en vigueur où tu travailles).
Anthony Fleury wrote:Le C++ définit ce qu'est un "null pointer constant", et il le
définit comme étant une valeur entière constante comparée
égale à 0. Donc une bonne définition de NULL en C++ est celle
donnée en dessous. (4.10 dans la norme)
Sauf que l'utilisateur n'a pas le droit de le faire, dès qu'il a
inclu un parmi un certain nombre d'en-têtes.
[ En fait, d'après la norme et le paragraphe en question, on
peut mettre const int NULL = 0; ou const int NULL = 0L; si
j'ai tout bien compris ].
Selon la norme, NULL doit être 1) un macro, 2) défini dans des
en-têtes standard, et 3) évalué à une constante de pointeur nul
(qui malgré son nom, doit avoir un type entier, et non un type
pointeur).
est interdite du fait que la conversion de void* -> T* doit
être explicitement demandée, tout utilisateur de malloc() & co
en C++ l'aura remarqué.
Je ne comprends pas trop ta phrase, ni son rapport avec NULL.
Sauf en ce qui concerne les formes permises, la définition de
NULL et des constantes de pointeur nul est identique en C et en
C++.
Deux choses :
- d'une part en C++ je pense qu'il est préférable de mettre 0
partout. (c'est une question de gout, un long débat sur les
groupes anglophones, et ca fait aussi une ligne dans TC++PL)
Ça dépend de ton style de programmation et du compilateur dont
tu te sers. Fais-toi la règle que si le code ne se compile pas
avec g++ sans avertissements, il est incorrect, et NULL n'a que
des avantages par rapport à zéro.
- Cette version devrait compiler sans problème et sans
warning.
Ça dépend de ce qu'il a inclu avant. Si après l'expansion du
macro, le compilateur voit :
const int 0 = 0 ;
il risque de ne pas être content. Je ne crois pas que ça
explique le comportement qu'il a vu, mais il reste que sa
déclaration donne un comportement indéfini dès qu'il inclut
certains en-têtes.
Sans voir le contexte complet de ton problème, c'est difficile à
dire. La solution préférée, c'est d'inclure <stddef.h> en tête,
et de se servir du NULL défini là (ou de s'en passer
complètement, et écrire 0 -- selon le compilateur, ton style de
programmation, et les conventions en vigueur où tu travailles).
PS: je viens de JAVA et cela me choque :(
PS: je viens de JAVA et cela me choque :(
PS: je viens de JAVA et cela me choque :(
"En langage C, il arrivait fréquemment qu'une macro NULL soit définie
pour représenter le pointeur 0. En C++, un contrôle de type plus sérieux
rend moins problématique l'utilisation du 0 normal, plutôt que de toute
macro NULL. Le nombre de problèmes est ainsi considérablement réduit. Si
vous pensez devoir définir NULL, utilisez
const int NULL = 0;
Le qualificatif const (§5.4) évite toute redéfinition accidentelle de
NULL et permet l'utilisation dans tous les cas où une constante est
requise. "
N'est ce dont pas une grosse erreur dans TC++PL ?
"En langage C, il arrivait fréquemment qu'une macro NULL soit définie
pour représenter le pointeur 0. En C++, un contrôle de type plus sérieux
rend moins problématique l'utilisation du 0 normal, plutôt que de toute
macro NULL. Le nombre de problèmes est ainsi considérablement réduit. Si
vous pensez devoir définir NULL, utilisez
const int NULL = 0;
Le qualificatif const (§5.4) évite toute redéfinition accidentelle de
NULL et permet l'utilisation dans tous les cas où une constante est
requise. "
N'est ce dont pas une grosse erreur dans TC++PL ?
"En langage C, il arrivait fréquemment qu'une macro NULL soit définie
pour représenter le pointeur 0. En C++, un contrôle de type plus sérieux
rend moins problématique l'utilisation du 0 normal, plutôt que de toute
macro NULL. Le nombre de problèmes est ainsi considérablement réduit. Si
vous pensez devoir définir NULL, utilisez
const int NULL = 0;
Le qualificatif const (§5.4) évite toute redéfinition accidentelle de
NULL et permet l'utilisation dans tous les cas où une constante est
requise. "
N'est ce dont pas une grosse erreur dans TC++PL ?