Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois !
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
Mais rien n'y fait !
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois !
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
Mais rien n'y fait !
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois !
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
Mais rien n'y fait !
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque
fois !
Ca veut dire quoi "qui bug"? A chaque fois qu'on n'obtient pas le
Comment peut-on faire pour forcer coute que coute un cast ?
reiunterpret_cast, mais je suis quasi-certain que ton programme plantera
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque
fois !
Ca veut dire quoi "qui bug"? A chaque fois qu'on n'obtient pas le
Comment peut-on faire pour forcer coute que coute un cast ?
reiunterpret_cast, mais je suis quasi-certain que ton programme plantera
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque
fois !
Ca veut dire quoi "qui bug"? A chaque fois qu'on n'obtient pas le
Comment peut-on faire pour forcer coute que coute un cast ?
reiunterpret_cast, mais je suis quasi-certain que ton programme plantera
Bismark Prods wrote:Bonjour,
Bonjour,Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois
!
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
ce sont les seuls moyens de faire un cast, le (type) valeur force déjà le
cast (et est équivalent à un reinterpret_cast<>()) et le static_cast<>()
permet un certain contrôle à la compilation vu qu'il fait des conversions
entre types de même "famille". (alors que (type) valeur et
reinterpret_cast<>() réinterprètes juste les bits du type de données pour
en faire une donnée de l'autre type)
Il reste un dernier type de "cast" qui sont les opérateurs de conversion.
Lorsque l'on veut convertir un double en int par exemple on peut utiliser
la
notation constructeur :
double d = 42.0;
int i = int(d);Mais rien n'y fait !
Quel est le code incriminé ? si il y a vraiment un bug, c'est que ca ne
vient pas spécialement du cast, enfin c'est que cette opération tentée
n'est *vraiment* pas autorisée.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:
Bonjour,
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois
!
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
ce sont les seuls moyens de faire un cast, le (type) valeur force déjà le
cast (et est équivalent à un reinterpret_cast<>()) et le static_cast<>()
permet un certain contrôle à la compilation vu qu'il fait des conversions
entre types de même "famille". (alors que (type) valeur et
reinterpret_cast<>() réinterprètes juste les bits du type de données pour
en faire une donnée de l'autre type)
Il reste un dernier type de "cast" qui sont les opérateurs de conversion.
Lorsque l'on veut convertir un double en int par exemple on peut utiliser
la
notation constructeur :
double d = 42.0;
int i = int(d);
Mais rien n'y fait !
Quel est le code incriminé ? si il y a vraiment un bug, c'est que ca ne
vient pas spécialement du cast, enfin c'est que cette opération tentée
n'est *vraiment* pas autorisée.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:Bonjour,
Bonjour,Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois
!
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
ce sont les seuls moyens de faire un cast, le (type) valeur force déjà le
cast (et est équivalent à un reinterpret_cast<>()) et le static_cast<>()
permet un certain contrôle à la compilation vu qu'il fait des conversions
entre types de même "famille". (alors que (type) valeur et
reinterpret_cast<>() réinterprètes juste les bits du type de données pour
en faire une donnée de l'autre type)
Il reste un dernier type de "cast" qui sont les opérateurs de conversion.
Lorsque l'on veut convertir un double en int par exemple on peut utiliser
la
notation constructeur :
double d = 42.0;
int i = int(d);Mais rien n'y fait !
Quel est le code incriminé ? si il y a vraiment un bug, c'est que ca ne
vient pas spécialement du cast, enfin c'est que cette opération tentée
n'est *vraiment* pas autorisée.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Merci de me répondre, voici ce que le programme en C faisait que celui en
C++ refuse de faire :
Il y a la structure : inflate_state suivante :
Or donc le programme C arrivait à affecter la structure inflate_state dans
la structure internal_state (internal_state est bien plus importante en
terme de taille que inflate_state, donc il ne peut pas y avoir
dépassement).
Si vous avez une solution ca serait vraiment formidable.
Merci de me répondre, voici ce que le programme en C faisait que celui en
C++ refuse de faire :
Il y a la structure : inflate_state suivante :
Or donc le programme C arrivait à affecter la structure inflate_state dans
la structure internal_state (internal_state est bien plus importante en
terme de taille que inflate_state, donc il ne peut pas y avoir
dépassement).
Si vous avez une solution ca serait vraiment formidable.
Merci de me répondre, voici ce que le programme en C faisait que celui en
C++ refuse de faire :
Il y a la structure : inflate_state suivante :
Or donc le programme C arrivait à affecter la structure inflate_state dans
la structure internal_state (internal_state est bien plus importante en
terme de taille que inflate_state, donc il ne peut pas y avoir
dépassement).
Si vous avez une solution ca serait vraiment formidable.
Bismark Prods wrote:Merci de me répondre, voici ce que le programme en C faisait que celui
en
C++ refuse de faire :
Il y a la structure : inflate_state suivante :
[ snip les grosses structures ]
Au passage les typedefs sont inutils en C++ pour des structures.
Or donc le programme C arrivait à affecter la structure inflate_state
dans
la structure internal_state (internal_state est bien plus importante en
terme de taille que inflate_state, donc il ne peut pas y avoir
dépassement).
Si vous avez une solution ca serait vraiment formidable.
Si c'est seulement une affectation, pourquoi ne pas utiliser std::memcpy
dans <cstring> ? comme on pourrait le faire en C en fait.
en fait sur ce point je ne vois pas la différence qui pourrait exister
entre
le programme C et le programme C++ et un reinterpret_cast<> () aurait le
même comportement qu'un cast à la C, et le cast à la C aurait le
comportement qu'il a en C...
je pense donc à un comportement indéfini plutot, du genre, y a t il
tentative d'accès à l'un des membres de la structure ainsi castée et
affectation ensuite ? ou déréférencement de l'un des pointeurs qui du fait
des bits de padding n'aurait pas du tout la valeur attendue ?
En clair je pense plutot à un problème du programme C de départ que d'un
problème de cast en C++.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:
Merci de me répondre, voici ce que le programme en C faisait que celui
en
C++ refuse de faire :
Il y a la structure : inflate_state suivante :
[ snip les grosses structures ]
Au passage les typedefs sont inutils en C++ pour des structures.
Or donc le programme C arrivait à affecter la structure inflate_state
dans
la structure internal_state (internal_state est bien plus importante en
terme de taille que inflate_state, donc il ne peut pas y avoir
dépassement).
Si vous avez une solution ca serait vraiment formidable.
Si c'est seulement une affectation, pourquoi ne pas utiliser std::memcpy
dans <cstring> ? comme on pourrait le faire en C en fait.
en fait sur ce point je ne vois pas la différence qui pourrait exister
entre
le programme C et le programme C++ et un reinterpret_cast<> () aurait le
même comportement qu'un cast à la C, et le cast à la C aurait le
comportement qu'il a en C...
je pense donc à un comportement indéfini plutot, du genre, y a t il
tentative d'accès à l'un des membres de la structure ainsi castée et
affectation ensuite ? ou déréférencement de l'un des pointeurs qui du fait
des bits de padding n'aurait pas du tout la valeur attendue ?
En clair je pense plutot à un problème du programme C de départ que d'un
problème de cast en C++.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:Merci de me répondre, voici ce que le programme en C faisait que celui
en
C++ refuse de faire :
Il y a la structure : inflate_state suivante :
[ snip les grosses structures ]
Au passage les typedefs sont inutils en C++ pour des structures.
Or donc le programme C arrivait à affecter la structure inflate_state
dans
la structure internal_state (internal_state est bien plus importante en
terme de taille que inflate_state, donc il ne peut pas y avoir
dépassement).
Si vous avez une solution ca serait vraiment formidable.
Si c'est seulement une affectation, pourquoi ne pas utiliser std::memcpy
dans <cstring> ? comme on pourrait le faire en C en fait.
en fait sur ce point je ne vois pas la différence qui pourrait exister
entre
le programme C et le programme C++ et un reinterpret_cast<> () aurait le
même comportement qu'un cast à la C, et le cast à la C aurait le
comportement qu'il a en C...
je pense donc à un comportement indéfini plutot, du genre, y a t il
tentative d'accès à l'un des membres de la structure ainsi castée et
affectation ensuite ? ou déréférencement de l'un des pointeurs qui du fait
des bits de padding n'aurait pas du tout la valeur attendue ?
En clair je pense plutot à un problème du programme C de départ que d'un
problème de cast en C++.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Une chose que je n'ai pas mentionné est que le cast tente en réalité un
casting sur fonction (sur pointeur).
Mais votre réponse me satisfait pleinement. Je pense que je vais pouvoir y
remedier.
Merci
Bismark
Une chose que je n'ai pas mentionné est que le cast tente en réalité un
casting sur fonction (sur pointeur).
Mais votre réponse me satisfait pleinement. Je pense que je vais pouvoir y
remedier.
Merci
Bismark
Une chose que je n'ai pas mentionné est que le cast tente en réalité un
casting sur fonction (sur pointeur).
Mais votre réponse me satisfait pleinement. Je pense que je vais pouvoir y
remedier.
Merci
Bismark
Bismark Prods wrote:
[ il est plus lisible de répondre après le message auquel on répond, de
manière à respecter la logique de lecture ]Une chose que je n'ai pas mentionné est que le cast tente en réalité un
casting sur fonction (sur pointeur).
Mais votre réponse me satisfait pleinement. Je pense que je vais pouvoir
y
remedier.
Merci
Bismark
Je n'ai pas vraiment compris ce que venait faire les pointeurs de
fonctions
ici et doit avouer que je suis un peu perdu sans code minimal representant
le problème. (et même sans code tout court, nous n'avons eu que les
définitions de deux structures) En fait, tout du moins pour moi, je ne
peux
faire avec les informations données que des suppositions et donc dire que
si ca fonctionnait avec un cast à la C en C et que ca fonctionne pas avec
un cast à la C en C++ c'est un comportement indéfini dans le code C. Mais
je précise bien que ce ne sont que des suppositions.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:
[ il est plus lisible de répondre après le message auquel on répond, de
manière à respecter la logique de lecture ]
Une chose que je n'ai pas mentionné est que le cast tente en réalité un
casting sur fonction (sur pointeur).
Mais votre réponse me satisfait pleinement. Je pense que je vais pouvoir
y
remedier.
Merci
Bismark
Je n'ai pas vraiment compris ce que venait faire les pointeurs de
fonctions
ici et doit avouer que je suis un peu perdu sans code minimal representant
le problème. (et même sans code tout court, nous n'avons eu que les
définitions de deux structures) En fait, tout du moins pour moi, je ne
peux
faire avec les informations données que des suppositions et donc dire que
si ca fonctionnait avec un cast à la C en C et que ca fonctionne pas avec
un cast à la C en C++ c'est un comportement indéfini dans le code C. Mais
je précise bien que ce ne sont que des suppositions.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:
[ il est plus lisible de répondre après le message auquel on répond, de
manière à respecter la logique de lecture ]Une chose que je n'ai pas mentionné est que le cast tente en réalité un
casting sur fonction (sur pointeur).
Mais votre réponse me satisfait pleinement. Je pense que je vais pouvoir
y
remedier.
Merci
Bismark
Je n'ai pas vraiment compris ce que venait faire les pointeurs de
fonctions
ici et doit avouer que je suis un peu perdu sans code minimal representant
le problème. (et même sans code tout court, nous n'avons eu que les
définitions de deux structures) En fait, tout du moins pour moi, je ne
peux
faire avec les informations données que des suppositions et donc dire que
si ca fonctionnait avec un cast à la C en C et que ca fonctionne pas avec
un cast à la C en C++ c'est un comportement indéfini dans le code C. Mais
je précise bien que ce ne sont que des suppositions.
Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27
Bismark Prods wrote:Bonjour,
Bonjour,Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois
!
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
ce sont les seuls moyens de faire un cast, le (type) valeur force déjà le
cast (et est équivalent à un reinterpret_cast<>())
Bismark Prods wrote:
Bonjour,
Bonjour,
Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois
!
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
ce sont les seuls moyens de faire un cast, le (type) valeur force déjà le
cast (et est équivalent à un reinterpret_cast<>())
Bismark Prods wrote:Bonjour,
Bonjour,Je reprend un code écrit en C et il y a là un cast qui bug à chaque fois
!
Comment peut-on faire pour forcer coute que coute un cast ?
J'ai essayé static_cast<> et (type)valeur
ce sont les seuls moyens de faire un cast, le (type) valeur force déjà le
cast (et est équivalent à un reinterpret_cast<>())