PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : trap objects in C?



nobody0
06-02-2004, 17:31
Beim Lesen des ISO-C-Standards ist mir aufgefallen, dass es unter den Objekten auch trap objects (Kap. 6.2.6.1, 6.2.6.2) gibt, aber ich kann mir dazu kein Beispiel denken und google half nicht weiter. Gibt´s hier einen guten C-Programmierer, der mal ein Beispiel nennen kann?

wraith
06-02-2004, 18:19
Du meinst object (trap) representation,oder?Weil den Ausdruck trap object gibt es nicht.

Das Standardbsp,einige werden es schon kennen *g*.
Ein Integer hat eine Anzahl von Bits (sagen wir n Stück),damit gibt es 2 hoch n verschiedene Bitstellungen.Aber nicht jede muß eine gültige sein.
Zum Bsp gibt es Systeme (genauer: der Standard erlaubt,das es solche Systeme gibt),in denen nicht jedes Bit zur eigentlichen Representation der Zahl herangezogen wird.Die restlichen Bits sind dann z.b Prüfbits,Paritybits,usw...
In diesem System kann dann z.b der Integer 0 so dargestellt sein
111100...0 //<-- Ja,es sind nicht alle Bits 0
Die oberen Bits sollen immer 1111 sein,ansonsten gibt es beim Zugriff auf diesen Wert eine Trap.
Aber die oberen Bits zählen nicht zur Zahlendarstellung,und durch Shifts und Zahlenarithmetik wirst du darauf auch nicht zugreifen können.
So,wie könnte man es jetzt schaffen die oberen Bits in eine Stellung ungleich 1111 zu bringen?
Mit ein wenig 'Glück' reicht es,wenn man einer auto Variablen keinen Wert zu weist,also steht etwas undefiniertes drin.
Andere Möglichkeit wäre mit memset (<- Google wird sich mit Infos davon zu ballern).Daher verwendet man memset nur bei char Typen,weil dort die Paritybits == 0 per Definition sind.
Die Bits sind jetzt also in einer Stellung,in die sie durch durch die normale Arithmetik (+,-,*,/,%,>>,<<) nie hätten kommen können (der Standard schreibt auch dazu,daß es dabei nie zu einer Trap representation kommt (Overflow nicht mitgerechnet)).
Naja,und ein Trap ist ein Fehlerzustand.

Für weitere Infos: Google::groups,Autor: Chris Torek,Stichworte: trap representation (hab' ich jetzt nicht überprüft,aber Chris Torek ist aufjedenfall die erste Anlaufstelle).

Btw. Es ist weitaus effektiver sich comp.std.c und comp.lang.c zu abonnieren,als den Standard von vorne bis hinten zu lesen.
Wenn man was bestimmtes sucht,ist es ganz hilfreich nachschlagen zu könnnen.

nobody0
06-02-2004, 19:23
Aha, danke :)
Damit ist ja auch ein ECC Code eine object trap representation.