Heim >Backend-Entwicklung >C++ >Was sind Fallendarstellungen in C und wie unterscheiden sie sich von undefiniertem Verhalten?

Was sind Fallendarstellungen in C und wie unterscheiden sie sich von undefiniertem Verhalten?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 00:02:14585Durchsuche

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

Trap-Darstellung in C: Eine Ausarbeitung

Was ist eine Trap-Darstellung?

C99 führt den Begriff „Trap-Darstellung“ ein, um Bitmuster zu beschreiben, die die Größe eines Typs einnehmen, aber undefiniertes Verhalten auslösen, wenn sie als Werte dafür verwendet werden Typ. Das Vorhandensein dieser Muster ist optional, mit Ausnahme von unsigned char, das sie garantiert vermeidet.

Ein Beispiel für eine Trap-Darstellung ist ein signalisierendes NaN in Gleitkommatypen. Sein Verhalten ist in C99 nicht definiert, obwohl IEC 60559 seine Handhabung spezifiziert.

Nullzeiger und Trap-Darstellungen

Während Zeigertypen Trap-Darstellungen besitzen können, ist dies bei Nullzeigern nicht der Fall als solches angesehen. Undefiniertes Verhalten entsteht nur, wenn sie dereferenziert oder versetzt werden. Trap-Darstellungen hingegen verursachen undefiniertes Verhalten bei einfachen Lesevorgängen mit ihrem repräsentativen Typ.

Undefiniertes Verhalten vs. Trap-Darstellung

Der von Ihnen bereitgestellte Code zeigt undefiniert Verhalten aufgrund von Zeiger-Aliasing-Regeln, nicht von Trap-Darstellungen. Um einen Float korrekt in einen Int mit derselben Darstellung umzuwandeln, verwenden Sie den folgenden Codeausschnitt:

int extract_int(float f)
{
    union { int i; float f; } u;
    u.f = f;
    return u.i;
}

Dieser Code weist in C99 ein nicht spezifiziertes Verhalten auf, bei dem der genaue erzeugte Ganzzahlwert nicht definiert, sondern eine gültige Ganzzahl ist Ergebnis ist garantiert. Es handelt sich nicht um eine Fallendarstellung und sie kann nicht auf der Grundlage von Annahmen über ihre Abwesenheit wegoptimiert werden.

Das obige ist der detaillierte Inhalt vonWas sind Fallendarstellungen in C und wie unterscheiden sie sich von undefiniertem Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn