Zweifellos führt der C-Standard eine umfangreiche Reihe von Definitionen für Verhaltensweisen ein, die als „unklar“ kategorisiert werden. Allerdings hat der Satz „Das Programm ist schlecht geformt; keine Diagnose erforderlich“ Fragen hinsichtlich seiner Unterscheidung von anderen Verhaltenskategorien aufgeworfen.
Definition von wohlgeformtem und schlecht geformtem Verhalten:
Der C-Standard klassifiziert Programme entweder als wohlgeformt oder schlecht geformt. Wohlgeformte Programme halten sich sowohl an die Syntax als auch an diagnostizierbare semantische Regeln. Umgekehrt verstoßen schlecht geformte Programme gegen diese Regeln und sollten idealerweise nicht kompiliert werden.
Implementierungsdefinierte, nicht spezifizierte und undefinierte Verhaltensweisen:
Implementierungsdefinierte und nicht spezifizierte Verhaltensweisen sind unterscheiden sich von wohlgeformten Verhaltensweisen, implizieren jedoch keinen fehlerhaften Code. Im ersten Fall muss die Implementierung ihre spezifischen Aktionen dokumentieren, während im zweiten Fall keine Dokumentation erforderlich ist. Undefiniertes Verhalten hingegen bedeutet gemäß 1.3.13, dass das Programm fehlerhaft ist.
Compiler, undefiniertes Verhalten und schlecht geformte Programme:
Obwohl der Begriff „fehlerhaft“ darauf hindeutet, dass Compiler die Kompilierung mit einer Fehlermeldung beenden sollten, ermöglicht der C-Standard die stille Behandlung undefinierten Verhaltens. Insbesondere geben Compiler häufig keine Warnungen aus oder beenden die Kompilierung aufgrund undefinierten Verhaltens.
Schlecht formatierte Programme und Diagnoseanforderungen:
Die Verwendung von „keine Diagnose erforderlich“ neben „schlecht geformt“ stellt ein Paradoxon dar. Wenn schlecht formatierte Programme nicht kompiliert werden sollten, wäre es kontraintuitiv, den Compilern zu erlauben, sie stillschweigend zu ignorieren. Die Norm lässt diese Möglichkeit jedoch ausdrücklich zu.
Fazit:
Die Unterscheidung zwischen „schlecht geformt; keine Diagnose erforderlich“ und „undefiniertes Verhalten“ bleibt unklar. Zwar besteht möglicherweise ein Zusammenhang zwischen schlecht formatierten Programmen und falschem Code sowie undefiniertem Verhalten und Laufzeitproblemen, dies ist jedoch nicht immer konsistent. Letztendlich ist der Aspekt „keine Diagnose erforderlich“ von größter Bedeutung, da er bei fehlerhaften Programmen Vorrang vor der Erwartung einer Diagnosegenerierung hat.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „schlecht geformt; keine Diagnose erforderlich' und undefiniertem Verhalten von C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!