Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen dem „undefinierten Verhalten' von C und „schlecht geformt; keine Diagnose erforderlich'?

Was ist der Unterschied zwischen dem „undefinierten Verhalten' von C und „schlecht geformt; keine Diagnose erforderlich'?

Barbara Streisand
Barbara StreisandOriginal
2024-11-21 12:40:16589Durchsuche

What's the Difference Between C  's

Unterschied zwischen undefiniertem und schlecht geformtem Verhalten: Keine Diagnose erforderlich

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.

Definitionen

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.

Der Fall „schlecht geformt; keine Diagnose erforderlich“

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.

Unterscheidung von undefiniertem Verhalten

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.

Auswirkungen auf Kompilierung und Ausführung

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.

Konsistenzprobleme

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.

Schlussfolgerung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn