si tu savais comme je m'en cogne de ces indéfinitions là !!
Tiens, tiens, tiens. On réjoigne une accusation que j'ai fait
dans la passée. Tu t'en fous que ton code soit correct, ou qu'il
est sûr de marcher. Pourvu qu'il ne crashe pas pendant la démo,
c'est ça.
Donc, tu n'utiliseras jamais Sun CC, ni g++. Ni, probablement
VC++, parce que jusqu'à preuve du contraire, il l'estime
indéfini aussi.
si tu savais comme je m'en cogne de ces indéfinitions là !!
Tiens, tiens, tiens. On réjoigne une accusation que j'ai fait
dans la passée. Tu t'en fous que ton code soit correct, ou qu'il
est sûr de marcher. Pourvu qu'il ne crashe pas pendant la démo,
c'est ça.
Donc, tu n'utiliseras jamais Sun CC, ni g++. Ni, probablement
VC++, parce que jusqu'à preuve du contraire, il l'estime
indéfini aussi.
si tu savais comme je m'en cogne de ces indéfinitions là !!
Tiens, tiens, tiens. On réjoigne une accusation que j'ai fait
dans la passée. Tu t'en fous que ton code soit correct, ou qu'il
est sûr de marcher. Pourvu qu'il ne crashe pas pendant la démo,
c'est ça.
Donc, tu n'utiliseras jamais Sun CC, ni g++. Ni, probablement
VC++, parce que jusqu'à preuve du contraire, il l'estime
indéfini aussi.
Falk Tannhäuser wrote on 18/10/2006 02:07:Sylvain schrieb:qui s'autorisera à avoir des références nulles devra les tester
On les teste comment, sachant que le compilateur a le droit d'éliminer
le test ?
ton compilateur modifie tes séquencements en virant des tests ??
De plus, rien ne garantit que la référence reste nulle lorsque
l'héritage entre en jeu !
?!? héritage ou pas la référence reste ce qu'elle est tant qu'une
nouvelle valeur ne lui est pas assignée.
Question à 0,02 : Qu'affiche-t-il le programme suivant:
avec les compilos que j'utilise ?
la console affiche "Null reference"
struct Base {
int i;
};
struct Derived : public Base {
virtual ~Derived() {}
};
btw, cette écriture est incorrecte
et peux justement provoquer des plantes simplement en faisant:
Base* b = new Derived();
delete b;
la virtualité du destructeur doit être définie sur la classe de base,
non sur une classe enfant.
Falk Tannhäuser wrote on 18/10/2006 02:07:
Sylvain schrieb:
qui s'autorisera à avoir des références nulles devra les tester
On les teste comment, sachant que le compilateur a le droit d'éliminer
le test ?
ton compilateur modifie tes séquencements en virant des tests ??
De plus, rien ne garantit que la référence reste nulle lorsque
l'héritage entre en jeu !
?!? héritage ou pas la référence reste ce qu'elle est tant qu'une
nouvelle valeur ne lui est pas assignée.
Question à 0,02 : Qu'affiche-t-il le programme suivant:
avec les compilos que j'utilise ?
la console affiche "Null reference"
struct Base {
int i;
};
struct Derived : public Base {
virtual ~Derived() {}
};
btw, cette écriture est incorrecte
et peux justement provoquer des plantes simplement en faisant:
Base* b = new Derived();
delete b;
la virtualité du destructeur doit être définie sur la classe de base,
non sur une classe enfant.
Falk Tannhäuser wrote on 18/10/2006 02:07:Sylvain schrieb:qui s'autorisera à avoir des références nulles devra les tester
On les teste comment, sachant que le compilateur a le droit d'éliminer
le test ?
ton compilateur modifie tes séquencements en virant des tests ??
De plus, rien ne garantit que la référence reste nulle lorsque
l'héritage entre en jeu !
?!? héritage ou pas la référence reste ce qu'elle est tant qu'une
nouvelle valeur ne lui est pas assignée.
Question à 0,02 : Qu'affiche-t-il le programme suivant:
avec les compilos que j'utilise ?
la console affiche "Null reference"
struct Base {
int i;
};
struct Derived : public Base {
virtual ~Derived() {}
};
btw, cette écriture est incorrecte
et peux justement provoquer des plantes simplement en faisant:
Base* b = new Derived();
delete b;
la virtualité du destructeur doit être définie sur la classe de base,
non sur une classe enfant.
Il y a l'approche théorique cadré et décrit
par la norme et il y a l'expérience (la vraie vie).
Il y a l'approche théorique cadré et décrit
par la norme et il y a l'expérience (la vraie vie).
Il y a l'approche théorique cadré et décrit
par la norme et il y a l'expérience (la vraie vie).
je ne sais pas ce que tu attends et entends par preuve, mais VC gère
très bien la copie de pointeur -- ah et dans ce monde là on ne recompile
pas tous les matins son code chez son client avec son compilo sur son
architecture; donc en effet on s'autorise quelque raccourcis ayant fait
leurs preuves.
je ne sais pas ce que tu attends et entends par preuve, mais VC gère
très bien la copie de pointeur -- ah et dans ce monde là on ne recompile
pas tous les matins son code chez son client avec son compilo sur son
architecture; donc en effet on s'autorise quelque raccourcis ayant fait
leurs preuves.
je ne sais pas ce que tu attends et entends par preuve, mais VC gère
très bien la copie de pointeur -- ah et dans ce monde là on ne recompile
pas tous les matins son code chez son client avec son compilo sur son
architecture; donc en effet on s'autorise quelque raccourcis ayant fait
leurs preuves.
Pourrais tu m'indiquer l'endroit dans la doc de VC où ils indiquent
qu'ils ont pour leur compilateur défini ce comportement indéfini dans la
nome ? C'est le genre d'information que je n'ai jamais réussi à trouver.
Pourrais tu m'indiquer l'endroit dans la doc de VC où ils indiquent
qu'ils ont pour leur compilateur défini ce comportement indéfini dans la
nome ? C'est le genre d'information que je n'ai jamais réussi à trouver.
Pourrais tu m'indiquer l'endroit dans la doc de VC où ils indiquent
qu'ils ont pour leur compilateur défini ce comportement indéfini dans la
nome ? C'est le genre d'information que je n'ai jamais réussi à trouver.
On connaît des cas où des gens ont parcourus des dizaines de kilomètres
sur l'autoroute au contresens sans accident - pourquoi alors se prendre
la tête avec l'approche théorique cadrée et décrite par le code de la
route, puisque l'expérience / la vraie vie montrent que cela ne sert à
rien ?
On connaît des cas où des gens ont parcourus des dizaines de kilomètres
sur l'autoroute au contresens sans accident - pourquoi alors se prendre
la tête avec l'approche théorique cadrée et décrite par le code de la
route, puisque l'expérience / la vraie vie montrent que cela ne sert à
rien ?
On connaît des cas où des gens ont parcourus des dizaines de kilomètres
sur l'autoroute au contresens sans accident - pourquoi alors se prendre
la tête avec l'approche théorique cadrée et décrite par le code de la
route, puisque l'expérience / la vraie vie montrent que cela ne sert à
rien ?
en partant du principe que l'utilisateur est assez mûr pour ne pas
en partant du principe que l'utilisateur est assez mûr pour ne pas
en partant du principe que l'utilisateur est assez mûr pour ne pas
Falk Tannhäuser wrote on 18/10/2006 02:07:Sylvain schrieb:qui s'autorisera à avoir des références nulles devra les tester
On les teste comment, sachant que le compilateur a le droit
d'éliminer le test ?
ton compilateur modifie tes séquencements en virant des tests ??
change de compilo !!
De plus, rien ne garantit que la référence reste nulle lorsque
l'héritage entre en jeu !
?!? héritage ou pas la référence reste ce qu'elle est tant qu'une
nouvelle valeur ne lui est pas assignée.
Question à 0,02 ? : Qu'affiche-t-il le programme suivant:
avec les compilos que j'utilise ?
la console affiche "Null reference"
struct Base {
int i;
};
struct Derived : public Base {
virtual ~Derived() {}
};
btw, cette écriture est incorrecte et peux justement provoquer
des plantes simplement en faisant:
Base* b = new Derived();
delete b;
la virtualité du destructeur doit être définie sur la classe
de base, non sur une classe enfant.
Falk Tannhäuser wrote on 18/10/2006 02:07:
Sylvain schrieb:
qui s'autorisera à avoir des références nulles devra les tester
On les teste comment, sachant que le compilateur a le droit
d'éliminer le test ?
ton compilateur modifie tes séquencements en virant des tests ??
change de compilo !!
De plus, rien ne garantit que la référence reste nulle lorsque
l'héritage entre en jeu !
?!? héritage ou pas la référence reste ce qu'elle est tant qu'une
nouvelle valeur ne lui est pas assignée.
Question à 0,02 ? : Qu'affiche-t-il le programme suivant:
avec les compilos que j'utilise ?
la console affiche "Null reference"
struct Base {
int i;
};
struct Derived : public Base {
virtual ~Derived() {}
};
btw, cette écriture est incorrecte et peux justement provoquer
des plantes simplement en faisant:
Base* b = new Derived();
delete b;
la virtualité du destructeur doit être définie sur la classe
de base, non sur une classe enfant.
Falk Tannhäuser wrote on 18/10/2006 02:07:Sylvain schrieb:qui s'autorisera à avoir des références nulles devra les tester
On les teste comment, sachant que le compilateur a le droit
d'éliminer le test ?
ton compilateur modifie tes séquencements en virant des tests ??
change de compilo !!
De plus, rien ne garantit que la référence reste nulle lorsque
l'héritage entre en jeu !
?!? héritage ou pas la référence reste ce qu'elle est tant qu'une
nouvelle valeur ne lui est pas assignée.
Question à 0,02 ? : Qu'affiche-t-il le programme suivant:
avec les compilos que j'utilise ?
la console affiche "Null reference"
struct Base {
int i;
};
struct Derived : public Base {
virtual ~Derived() {}
};
btw, cette écriture est incorrecte et peux justement provoquer
des plantes simplement en faisant:
Base* b = new Derived();
delete b;
la virtualité du destructeur doit être définie sur la classe
de base, non sur une classe enfant.
En revanche, si on utilise des références, le compilateur peut faire
l'économie du test ; le code
Derived& rD = ...;
Base& rB = rD;
se simplifie alors à
rB = *reinterpret_cast<Base*>(reinterpret_cast<char*>(&rD) -
offset_de_Base_dans_Derived);
ce qui explique le plantage observé dans mon exemple avec certains
compilateurs.
En revanche, si on utilise des références, le compilateur peut faire
l'économie du test ; le code
Derived& rD = ...;
Base& rB = rD;
se simplifie alors à
rB = *reinterpret_cast<Base*>(reinterpret_cast<char*>(&rD) -
offset_de_Base_dans_Derived);
ce qui explique le plantage observé dans mon exemple avec certains
compilateurs.
En revanche, si on utilise des références, le compilateur peut faire
l'économie du test ; le code
Derived& rD = ...;
Base& rB = rD;
se simplifie alors à
rB = *reinterpret_cast<Base*>(reinterpret_cast<char*>(&rD) -
offset_de_Base_dans_Derived);
ce qui explique le plantage observé dans mon exemple avec certains
compilateurs.
"kanze" writes:
[...]
| > pour qui écrit un sample jamais publié (surtout pas utilisé)
| > c'est surement d'une haute importance; quand on est derrière
| > un vrai compilo pour du vrai code, le comportement est tout à
| > fait complètement défini.
| Avec le compilateur CenterLine, oui. Il est garanti de provoquer
| un message d'erreur. Avec les autres compilateurs, je ne sais
| pas. Je ne vois rien de garantie dans la documentation de Sun
| CC, ni dans celle de g++. (Je n'ai rien vu dans la documentation
| de VC++ non plus, mais je ne l'ai pas tout lue.)
Depuis des années, GCC exploite activement ces genres de
fonctionnement indéfini : si tu déréférences un pointeur, GCC en
déduit qu'il n'est pas nul (tu n'aurais pas dû le faire sinon) ; par
conséquent, l'optimizateur va virer des codes et autres choses sur la
base de cette inférence.
"kanze" <kanze@gabi-soft.fr> writes:
[...]
| > pour qui écrit un sample jamais publié (surtout pas utilisé)
| > c'est surement d'une haute importance; quand on est derrière
| > un vrai compilo pour du vrai code, le comportement est tout à
| > fait complètement défini.
| Avec le compilateur CenterLine, oui. Il est garanti de provoquer
| un message d'erreur. Avec les autres compilateurs, je ne sais
| pas. Je ne vois rien de garantie dans la documentation de Sun
| CC, ni dans celle de g++. (Je n'ai rien vu dans la documentation
| de VC++ non plus, mais je ne l'ai pas tout lue.)
Depuis des années, GCC exploite activement ces genres de
fonctionnement indéfini : si tu déréférences un pointeur, GCC en
déduit qu'il n'est pas nul (tu n'aurais pas dû le faire sinon) ; par
conséquent, l'optimizateur va virer des codes et autres choses sur la
base de cette inférence.
"kanze" writes:
[...]
| > pour qui écrit un sample jamais publié (surtout pas utilisé)
| > c'est surement d'une haute importance; quand on est derrière
| > un vrai compilo pour du vrai code, le comportement est tout à
| > fait complètement défini.
| Avec le compilateur CenterLine, oui. Il est garanti de provoquer
| un message d'erreur. Avec les autres compilateurs, je ne sais
| pas. Je ne vois rien de garantie dans la documentation de Sun
| CC, ni dans celle de g++. (Je n'ai rien vu dans la documentation
| de VC++ non plus, mais je ne l'ai pas tout lue.)
Depuis des années, GCC exploite activement ces genres de
fonctionnement indéfini : si tu déréférences un pointeur, GCC en
déduit qu'il n'est pas nul (tu n'aurais pas dû le faire sinon) ; par
conséquent, l'optimizateur va virer des codes et autres choses sur la
base de cette inférence.