En C, une représentation de piège fait référence à un modèle de bits qui s'inscrit dans l'allocation de mémoire d'un type de données mais déclenche un comportement non défini lorsqu'il est interprété comme une valeur de ce type.
Un exemple courant d'une représentation de piège est un NaN de signalisation (pas un nombre) dans les types à virgule flottante. La norme C99 définit explicitement le comportement des NaN de signalisation comme indéfini, même si leur comportement est bien spécifié dans d'autres normes.
Les représentations Trap sont également applicables à C . Cependant, il est important de noter que C introduit des mécanismes de sécurité de type supplémentaires qui peuvent empêcher certaines opérations qui entraîneraient un comportement indéfini en C.
Dans l'extrait de code fourni :
float f = 3.5; int *pi = (int*)&f;
En supposant que sizeof(int) == sizeof(float), f et *pi n'ont pas la même représentation binaire. La conversion d'un float en un int à l'aide d'un cast de pointeur entraîne un comportement indéfini en raison des règles d'alias de pointeur. Pour extraire correctement la représentation entière d'un flottant, l'approche suivante doit être utilisée :
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
Bien que ce code ait un comportement non spécifié en C99, il produit toujours une valeur entière valide qui n'est pas une représentation piège.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!