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!