Représentation piège en C : une élaboration
Qu'est-ce qu'une représentation piège ?
C99 introduit le terme « représentation de piège » pour décrire des modèles de bits qui occupent la taille d'un type mais déclenchent un comportement indéfini s'ils sont utilisés comme valeurs de ce type. L'existence de ces modèles est facultative, à l'exception des caractères non signés, qui garantissent leur évitement.
Un exemple de représentation de piège est une signalisation NaN dans les types à virgule flottante. Son comportement n'est pas défini dans C99, même si la CEI 60559 spécifie sa gestion.
Pointeurs nuls et représentations de piège
Bien que les types de pointeurs puissent posséder des représentations de piège, les pointeurs nuls ne le sont pas. considéré comme tel. Un comportement non défini ne se produit que lorsqu'ils sont déréférencés ou décalés. Les représentations de piège, en revanche, provoquent un comportement indéfini lors d'opérations de lecture simples avec leur type représentatif.
Comportement non défini par rapport à la représentation de piège
Le code que vous avez fourni présente un comportement indéfini comportement dû aux règles d’alias de pointeur, et non aux représentations de piège. Pour convertir correctement un float en int avec la même représentation, utilisez l'extrait de code suivant :
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
Ce code présente un comportement non spécifié en C99, où la valeur entière exacte produite n'est pas définie, mais un entier valide le résultat est garanti. Il ne s'agit pas d'une représentation piège et ne peut pas être optimisée sur la base d'hypothèses concernant son absence.
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!