www.wikidata.de-de.nina.az
Undefiniertes Verhalten beschreibt in der Informatik Code dessen Verhalten nicht spezifiziert ist und deshalb von verschiedenen Implementierungen von Compilern unterschiedlich behandelt werden kann Dies ist eine Eigenschaft einiger Programmiersprachen wie beispielsweise C 1 oder C Die Semantik bestimmter Operationen ist in den Standards dieser Sprachen nicht definiert wodurch eine Implementierung davon ausgehen kann dass diese Operationen im Normalfall nicht vorkommen Dadurch stimmt das Verhalten der Implementierung in jedem Fall mit den Standards der Sprache uberein Es ist die Aufgabe des Programmierers nie Code zu schreiben der undefiniertes Verhalten auslost Beteilige dich an der Diskussion Dieser Artikel wurde wegen inhaltlicher Mangel auf der Qualitatssicherungsseite der Redaktion Informatik eingetragen Dies geschieht um die Qualitat der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen Hilf mit die inhaltlichen Mangel dieses Artikels zu beseitigen und beteilige dich an der Diskussion Begrundung Der Einleitungssatz steht im Widerspruch zum englischen Artikel welcher undefiniertes Verhalten von unspezifiziertem Verhalten abgrenzt Inhaltsverzeichnis 1 Beispiele 2 Optimierungsmoglichkeiten 3 Unterkategorien 4 EinzelnachweiseBeispiele BearbeitenIn C fuhrt beispielsweise die Division durch Null zu undefiniertem Verhalten int f int x return x 0 undefiniert Ebenso die Dereferenzierung Verfolgung eines Nullzeigers int p NULL int i p undefiniertOptimierungsmoglichkeiten BearbeitenWenn eine Operation vom Standard mit bestimmten Werten als undefiniert erklart wird darf der Compiler davon ausgehen dass die ungultigen Werte niemals vorkommen Dabei darf der Compiler diese Annahme auf folgende Operationen anwenden Ein Beispiel ware die Dereferenzierung eines Zeigers Falls der Zeiger NULL ware ware es undefiniertes Verhalten int get int int p int i p Dereferenzierung gt p NULL if p NULL return 42 return i Der komplette if Block darf vom Compiler entfernt werden denn der Zeiger wurde bei der i Zuweisung bereits dereferenziert Der Compiler nimmt daher an dass der Zeiger nicht NULL sein kann Dies kann behoben werden indem man beispielsweise den Zugriff auf den referenzierten Speicher nach dem Test verschiebt int get int int p p darf hier alles sein if p NULL return 42 int i p Dereferenzierung gt p NULL return i Ausserdem darf Folgendes auch komplett entfernt werden if p NULL int i p printf Hello Unterkategorien BearbeitenEs wird zwischen undefinierten Operationen und undefinierten Werten unterschieden Wahrend das Lesen durch einen Nullzeiger eine undefinierte Operation ist moglicherweise zum Programmabsturz fuhrt resultiert das Lesen von nicht initialisiertem Speicher nur in einem undefinierten Wert Wenn beispielsweise ein unbekannter Wert mit exklusiv oder mit sich selbst verknupft wird ist er immer 0 somit ist Folgendes komplett legal int value Startwert von value nicht gesetzt value value exklusiv oder Verknupfung value ist nun definiert als 0 Dieses ahnelt dem Herunterzahlen bis auf 0 bei int waren negative Werte moglich die Verringerung des niedrigsten Wertes den int annehmen kann ist eine undefinierte Operation unsigned value while value 0 value Auf diese Weise wird in der Sprache Brainfuck eine Speicherzelle auf 0 gesetzt der Code dafur ist Einzelnachweise Bearbeiten What Every C Programmer Should Know About Undefined Behavior Abgerufen am 16 November 2014 Abgerufen von https de wikipedia org w index php title Undefiniertes Verhalten amp oldid 226913146