2016-06-06 6 views

Antwort

0

Das Verhalten ist nicht definiert.

[C99: 4/2]: Wenn ein ‚‚wird‘‘ oder ‚‚gilt nicht‘Anforderung‘, die außerhalb einer Einschränkung erscheint verletzt wird, ist das Verhalten nicht definiert. Undefiniertes Verhalten wird in dieser Internationalen Norm durch die Worte "undefined behaviour" oder durch das Fehlen einer expliziten Definition von Verhalten angegeben. Es gibt keinen Unterschied in der Betonung zwischen diesen drei; Sie alle beschreiben "Verhalten, das nicht definiert ist".

[C99: 5.1.2.3/2]: Der Zugriff auf ein flüchtiges Objekt, das Ändern eines Objekts, das Ändern einer Datei oder das Aufrufen einer Funktion, die eine dieser Operationen ausführt, sind alle Nebeneffekte, 11) die den Status der Ausführungsumgebung ändern. Die Auswertung eines Ausdrucks kann Nebenwirkungen hervorrufen. An bestimmten spezifizierten Punkten in der Ausführungssequenz, die als Sequenzpunkte bezeichnet werden, müssen alle Nebenwirkungen früherer Bewertungen vollständig sein, und es dürfen keine Nebenwirkungen nachfolgender Auswertungen auftreten. (Eine Zusammenfassung der Sequenzpunkte findet sich in Anhang C.)

[C99: C/1]: Die in 5.1.2.3 beschriebenen Sequenzpunkte: - Der Aufruf einer Funktion, nachdem die Argumente ausgewertet wurden (6.5.2.2) . - Das Ende des ersten Operanden der folgenden Operatoren: logisches UND & & (6.5.13); logisches ODER || (6.5.14); bedingt ? (6.5.15); Komma, (6.5.17). - Das Ende eines vollständigen Deklarators: Deklaratoren (6.7.5); - Das Ende eines vollständigen Ausdrucks: ein Initialisierer (6.7.8); der Ausdruck in einer Ausdruckserklärung (6.8.3); der steuernde Ausdruck einer Auswahlanweisung (if oder switch) (6.8.4); der steuernde Ausdruck einer while- oder do-Anweisung (6.8.5); jeder der Ausdrücke einer for-Anweisung (6.8.5.3); der Ausdruck in einer return-Anweisung (6.8.6.4). - Unmittelbar bevor eine Bibliotheksfunktion zurückkehrt (7.1.4). - Nach den Aktionen, die den einzelnen konfigurierten Eingabe-/Ausgabefunktionskonvertierungsspezifizierern zugeordnet sind (7.19.6, 7.24.2). - Unmittelbar vor und unmittelbar nach jedem Aufruf einer Vergleichsfunktion und auch zwischen jedem Aufruf einer Vergleichsfunktion und einer beliebigen Bewegung der Objekte, die als Argumente an diesen Aufruf übergeben wurden (7.20.5).

[C99: 6.2.2.2/10]: Die Reihenfolge der Auswertung des Funktionsbezeichners, der tatsächlichen Argumente und Teilausdrücke innerhalb der tatsächlichen Argumente ist nicht angegeben, aber es gibt einen Sequenzpunkt vor dem eigentlichen Aufruf.

Und, obwohl ich kein Negativ beweisen kann, gibt es keine Formulierung, um eine Ausnahme für den Varargs-Fall zu machen.

Verwandte Themen