Die C-Spezifikation definiert verschiedene Arten von Programmverhalten, einschließlich undefiniertem, nicht spezifiziertem, durch die Implementierung definiertem und fehlerhaftem Verhalten und schlecht geformt. Während einige Unterscheidungen relativ klar sind, hat der Begriff „schlecht geformt; keine Diagnose erforderlich“ Fragen über seine genaue Bedeutung aufgeworfen.
Schlecht geformt: A Programm, das entweder gegen die Syntax oder diagnostizierbare semantische Regeln verstößt.
Undefiniertes Verhalten:Programm Verhalten, für das der Standard keine Annahmen oder Anforderungen an die Aktionen der Implementierung stellt.
Fehlerhaft: Ein vom Standard verwendeter Begriff, der darauf hinweist, dass ein Programm fehlerhaft ist oder undefiniertes Verhalten zeigt.
Wohlgeformt: Ein Programm, das sich an die Syntax und die diagnostizierbare Semantik hält Regeln.
Diese spezifische Formulierung erscheint, wenn eine Implementierung die Sprache auf eine Weise erweitert, die eine neue Syntax oder ein neues Verhalten einführt. Gemäß dem Standard gelten solche Erweiterungen als fehlerhaft, die Implementierung darf jedoch keine Diagnosemeldung ausgeben.
Die entscheidende Unterscheidung hier ist, dass undefiniertes Verhalten explizit ist erkennt die fehlerhafte Natur des Programms an, während sich „falsch formuliert; keine Diagnose erforderlich“ auf einen bestimmten Fall bezieht, in dem die Implementierung einen Verstoß zulässt, ohne einen eindeutigen Fehler bereitzustellen Nachricht.
Ein schlecht formatiertes Programm sollte technisch gesehen nicht kompiliert werden. Im Fall von „schlecht geformt; keine Diagnose erforderlich“ ist es der Implementierung jedoch technisch erlaubt, das Programm stillschweigend zu kompilieren und sogar ohne Vorwarnung auszuführen.
Die inkonsistente Verwendung des Standards Die Verwendung der Terminologie im Zusammenhang mit Fehlern hat zu Verwirrung geführt. Der Begriff „fehlerhaft“ impliziert einen Fehler, der eine Diagnose erfordert, aber der Abschnitt „Hinweis“ in 1.3.13 erlaubt Implementierungen, solche Probleme stillschweigend zu ignorieren.
Es kann zwar einen subtilen Unterschied geben Zwischen „schlecht geformt; keine Diagnose erforderlich“ und „undefiniertes Verhalten“ macht es die Inkonsistenz des Standards schwierig, klare Unterscheidungen zu treffen. Letztlich beziehen sich beide Begriffe auf Situationen, in denen das Verhalten des Programms unvorhersehbar ist und zu unerwarteten Ergebnissen führen kann.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen dem „undefinierten Verhalten' von C und „schlecht geformt; keine Diagnose erforderlich'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!