Nicht sollte, sie sind verboten, genauso wie die Division durch Null. In vernünftig geschriebenem und strukturiertem Code kommen diese Fälle aber nicht vor oder sie lassen sich ohne Not vermeiden.
Da kann man natürlich neugierig sein, aber die Erkenntnis hilft auch nicht weiter. Undefiniert heißt undefiniert. Beim nächsten Compilerlauf mit etwas geändertem Code oder bei der nächsten Compilerversion kann das Ergebnis komplett anders sein. Auch ein Absturz gehört zu den Dingen, die passieren können. Genau das gleiche was passiert, wenn man versucht durch Null zu teilen.Ich würd schon gerne wissen was er daraus macht und das steht nunmal im Assembler Listing.
Dann habe ich einen oder mehrere Fehler im Code und muß diese beseitigen. Eine der ersten Sachen, die ein fremder Tester mit dem Code macht, ist die Optimierungsstufe ändern. Wenn er nicht in jeder Stufe geht, ist er kaputt und muß korrigiert werden. Und den Fehler findet man, ohne in das Assemblerlisting zu schauen.Stell Dir vor, dein Code funktioniert einwandfrei in der Optimierunsgsstufe O-0 also ohne Optimierungen
nun stellst Du eine andere Optimierungsstufe ein und plötzlich geht der Code nicht mehr.
Was macht Du dann ?
Das gerade ist die Herausforderung.Das heisst jetzt nicht dass der C Compiler Mist gebaut hat, sondern dass ich ihm anscheinend nicht richtig klar gemacht habe was er zu tun sollte....
Alle Programmierer, die ich kenne und die ihr Geld mit Programmieren verdienen, können kein Assembler und haben ein Listing höchstens mal aus Zufall gesehen. Dafür läuft ihr Code aber auf jedem Prozessor, für den es einen C-Compiler gibt. Ich benutze auch den gleichen C-Code für PIC16 und PIC24. Und wenn ich mal einen Algorithmus schneller und komfortabler testen will, teste ich ihn auf dem PC mit nem x86 oder dem Raspberry mit einem ARM.
MfG Klebwax
Lesezeichen