Diskussion:Undefiniertes Verhalten

Letzter Kommentar: vor 3 Jahren von RokerHRO in Abschnitt Spezialität von C und C++

Undefiniert vs. unspezifiziert

Bearbeiten

Dieser Artikel sieht im Einleitungssatz Undefiniertes Verhalten beschreibt ... Code, dessen Verhalten nicht spezifiziert ist ... die beiden Attribute als gleichbedeutend an. Die englische Wikipedia leitet den Artikel ueber undefined behavior dagegen mit dem Hinweis ein, dieses sei nicht zu verwechseln mit unspezifiziertem Verhalten (unspecified behavior): Undefiniertes Verhalten sei dagegen nur ein Verhalten, fuer das spezifiziert ist, das es unvorhersehbar sei.

Beide Artikel geben fuer diese widerspruechlichen Kernaussagen jedoch keine Quellen an, so dass ich nicht sicher weiss, wer hier irrt, aber es liegt nahe, dass der Irrtum auf der deutschen Seite liegt. -- Juergen 217.61.203.35 08:45, 5. Aug. 2020 (CEST)Beantworten

Ja, du hast recht. C und C++ kennen
  • undefined behavior
  • unspecified behavior
  • implementation-defined behavior
welche völlig unterschiedliche Auswirkungen auf das Programm haben. Da muss der Artikel präziser werden, wenn er das durcheinander wirft. --RokerHRO (Diskussion) 23:28, 8. Aug. 2020 (CEST)Beantworten

Nachtrag: Okay, hab den Artikel mir durchgelesen. Mein Fazit: Wegschmeißen und neuschreiben. :-/

Bevor ich damit anfange, würde ich aber gerne wissen, ob es so etwas wie "Undefiniertes Verhalten" nur bei C und C++ gibt, oder auch bei anderen Programmiersprachen. Und dann, je nach dem, den Artikel entweder auf C und C++ eingrenzen oder generischer fassen und den C/C++-Teil in einem eigenen Abschnitt behandeln. Wer weiß da mehr bezügl. anderer Programmiersprachen? --RokerHRO (Diskussion) 23:33, 8. Aug. 2020 (CEST)Beantworten

Soweit ich mich erinnere, gibt es ähnliche Angaben für CPUs (für Assembler-Programmierung), z.B. für Opcodes, die offiziell "nicht vergeben" sind. Z.B. gibt es CPUs, in denen eine Funktionalität (erstmals) implementiert wurde, diese aber entweder fehlerhaft oder nur unter bestimmten Randbedingungen korrekt arbeitet. Der Hersteller probiert's mit dieser CPU-Generation erst mal selbst aus, erst in der Nachfolgegeneration wird die Funktionalität dann offiziell freigegeben, meist überarbeitet und fehlerbereinigt.
Bzgl. Programmiersprachen gibt's natürlich ähnliches, dass ein (neues) Feature noch als "experimental" oder "unstable" gilt.
Ansonsten versuchen wohl die meisten Sprachen, zumindest "undefined" und "unspecified" auszuschließen.
Bei (altem) Fortran gibt's noch sehr hardwarenahes Verhalten. Z.B. wird nicht überprüft, ob bei einem Unterprogrammaufruf die mitgegebenen Parameter auf die Typen passen, die das Unterprogramm erwartet. Z.B. kann man eine Prozedur, die deklariert ist für Parameter (INT32, REAL64, INT32) auch aufrufen mit (INT32, INT32, INT16, INT16, INT32). Der Compiler übersetzt es, das Programm stürzt halt ab - oder auch nicht.
--arilou (Diskussion) 09:52, 27. Okt. 2020 (CET)Beantworten

Spezialität von C und C++

Bearbeiten

Dieser Artikel beschreibt eine Spezialität, die in C und dem davon abgeleiteten C++ vorkommt. Andere Programmiersprachen wie z.B. Fortran haben da andere Konzepte. Daher wäre es vermutlich am besten, den relevanten Inhalt dieser Seite auf die Seiten C und C++ zu verschieben und unter "Undefiniertes Verhalten" eine Begriffsklärung mit den Verweisen auf die entsprechenden Abschnitte in C und C++ abzulegen. Trex4321 (Diskussion) 19:55, 25. Aug. 2021 (CEST)Beantworten

Dagegen, denn zum einen sind die Artikel über C und C++ schon arg lang, und zum anderen müsste man die Informationen aus diesem Artikel dann in beiden Programmiersprachartikeln doppeln.
Besser wäre ein Artikel "Undefiniertes Verhalten (C/C++)" oder so, sofern es eben noch andere Programmiersprachen gibt, die das Konzept des "Undefinierten Verhaltens" kennen. Bisher habe ich diesen Begriff aber nur im C- und C++-Umfeld gehört. --RokerHRO (Diskussion) 21:29, 1. Sep. 2021 (CEST)Beantworten