Maison > développement back-end > C++ > Que sont les représentations de piège en C et en quoi diffèrent-elles d'un comportement non défini ?

Que sont les représentations de piège en C et en quoi diffèrent-elles d'un comportement non défini ?

Barbara Streisand
Libérer: 2024-12-20 00:02:14
original
555 Les gens l'ont consulté

What are Trap Representations in C and How Do They Differ from Undefined Behavior?

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal