Warum ist `cout
Dec 15, 2024 pm 02:05 PMUndefiniertes Verhalten: Cout verstehen << a << a
In C ist es unbedingt erforderlich, das Konzept des undefinierten Verhaltens zu verstehen. Undefiniertes Verhalten bezieht sich auf Situationen, in denen das Verhalten des Programms nicht durch den C-Standard spezifiziert ist, was zu unvorhersehbaren Ergebnissen führt.
Bedenken Sie die folgende Aussage:
cout << a++ << a;
Hier haben wir eine Sequenz von Operationen mit dem Inkrementoperator ( ) und dem Einfügungsoperator (<<). Wenn wir diese Operationen auf die Variable a anwenden, stoßen wir aufgrund des Fehlens von Sequenzpunkten auf undefiniertes Verhalten.
Sequenzpunkte sind bestimmte Punkte im Code, an denen der Compiler garantiert, dass alle Nebenwirkungen aufgetreten sind. In der obigen Aussage gibt es jedoch keinen Sequenzpunkt zwischen der Auswertung von a und a. Dies bedeutet, dass die Reihenfolge, in der diese Vorgänge ausgeführt werden, nicht im Standard festgelegt ist.
Daher kann die Ausgabe dieser Anweisung je nach Implementierung variieren. In bestimmten Fällen könnte die Ausgabe „01“ sein, während sie in anderen Fällen „10“ sein könnte. Der Standard garantiert jedoch nicht, welcher Fall auftritt, sodass das Verhalten undefiniert ist.
C 17-Update
Es ist wichtig zu beachten, dass die Regeln für die Ausdrucksauswertung in C wurden in C 17 aktualisiert. In C 17 gilt die folgende Regel für Verschiebungsoperatorausdrücke wie << und >>:
"In einem Verschiebungsoperatorausdruck E1<<E2 und E1>>E2 wird jede Wertberechnung und jeder Nebeneffekt von E1 vor jeder Wertberechnung und jedem Nebeneffekt von E2 sequenziert ."
Diese Regel beseitigt das undefinierte Verhalten in der ursprünglichen Anweisung. In C 17 ist die Anweisung cout << a << A; wird immer die Ausgabe „01“ erzeugen, da die Nebenwirkungen von a (Erhöhen von a) garantiert vor der Auswertung von a auftreten.
Das obige ist der detaillierte Inhalt vonWarum ist `cout. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Was ist das minimale gemeinsame Vielfache des maximalen gemeinsamen Divisors einer C -Sprachfunktion?
