Je sais, je l'ai vu déjà, mais je ne pouvais trouver aucune bonne explication pourquoi pas ce comportement:Comment ce comportement d'alias strict est-il indéfini?
#include <stdio.h>
#include <stdint.h>
//Common union for both types
union float_int {
float f;
uint32_t i;
};
int main(void) {
union float_int fi;
//This should be problematic
uint32_t* i_ptr = (uint32_t *)&fi.f;
fi.f = 10.0f;
printf("%f : %u\r\n", fi.f, fi.i); //Prints: 10.000000 : 1092616192 which is OK
printf("%u\r\n", *i_ptr); //Prints: 1092616192 which is also OK
return 0;
}
Si nous vérifions la représentation de la mémoire, les deux sont 4-bytes
longtemps donc il n'y a pas de débordement de mémoire dans pointage ou similaire.
Comment est ce comportement indéfini?
int main() {
union float_int fi;
void* v_ptr = &fi.f;
uint32_t* i_ptr = (uint32_t *)v_ptr;
}
Ce code est-il encore un comportement non défini? Je veux lire float
nombre comme unsigned integer 32-bits
. Pourquoi utiliser memcpy
est le seul moyen de le faire? Pourquoi utiliser memcpy
?
'indefined' ->' undefined'? –
@SouravGhosh Oui, merci. – tilz0R
@Stargateur donnez-moi une réponse correcte, s'il vous plaît. Je ne pouvais pas le trouver. – tilz0R