vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
20 janv. 2005 à 23:22
contax
Messages postés20Date d'inscriptionlundi 17 janvier 2005StatutMembreDernière intervention13 mars 2005
-
22 janv. 2005 à 20:30
Salut
Je ne sais pas si c'est moi qui délires, mais je ne comprends pas
pourquoi le code suivant génère un warning variable "locale 'd'
utilisée sans avoir été initialisée":
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 janv. 2005 à 13:56
Il aurait du être initialisé mais j'ai vérifié le listing, il ne l'est effectivement pas.
Comme quoi c'est pas toujours bon de croire que le compilo fera exact ce qui est écrit, les messages d'alertes sont plus surs.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 21 janv. 2005 à 10:30
Même avec +4 on a un warning...
Mais il me semble que &d+1 donne un adresse alignée sur 4 octets
puisque d est int. C'est comme quand on incrémente un int*, en fait ca
l'incrémente de 4.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 janv. 2005 à 10:45
"il me semble" voila bien un des mots qui n'ont rien a faire en terme de dev. Il suffit de controler la sortie asm du compilo pour voir qu'il a obéi au doigt et à l'oeil:
mov ecx, dword ptr[esp+41]
t'es parti ici pour au moins 100 cycles au lieu de 1 normal avec le rattrapage logiciel que fera le systeme.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 janv. 2005 à 11:39
Pour sur qu'on n'a pas la meme, j'ai pris la sortie sans warning:
p = *((int*)(((BYTE*)&d) + 1));
Fais gaffe avec ces conversions implicites en arithmetique pointeur, si tu veux le dword suivant je te conseille plutot:
p = *((int*)(((BYTE*)&d) + 4));
tu peux ainsi relire explicitement ce que tu voulais.