Heim > Backend-Entwicklung > C++ > Hauptteil

Warum wird „int i = i;' mit undefiniertem Verhalten kompiliert?

Linda Hamilton
Freigeben: 2024-11-11 07:21:03
Original
626 Leute haben es durchsucht

Why Does `int i = i;` Compile with Undefined Behavior?

Verhalten einer nicht initialisierten Variablen, die als eigener Initialisierer verwendet wird

Dieser Code in C/C wirft Fragen zu seinem Verhalten auf:

int i = i;
Nach dem Login kopieren

Obwohl eine nicht initialisierte Variable vorhanden ist, wird dieser Code ohne Warnungen und Fehler kompiliert. Warum passiert das und was sagt der Standard über sein Verhalten?

Unbestimmter Wert und Implementierungsabhängigkeit

Wenn eine Variable wie i verwendet wird, um sich selbst zu initialisieren, wird sie enthält einen unbestimmten Wert. Dieser Wert kann entweder ein nicht spezifizierter Wert oder eine Trap-Darstellung sein. Ein nicht spezifizierter Wert ist nicht im Standard definiert und abhängig von der Implementierung. Eine Trap-Darstellung löst, wenn sie von der Implementierung unterstützt wird, bei Verwendung ein undefiniertes Verhalten aus.

Undefiniertes Verhalten mit Auffüllung

Wenn die Implementierung Auffüllbits in ganzzahligen Typen zuweist und wenn Wenn der unbestimmte Wert eine Trap-Darstellung ist, führt seine Verwendung zu undefiniertem Verhalten. Dies liegt daran, dass der Zugriff auf die Trap-Darstellung zu unerwarteten Ergebnissen führt.

Unspezifizierter Wert ohne Auffüllung

Wenn die Implementierung jedoch keine Auffüllbits in ganzen Zahlen zuweist, ist der unbestimmte Wert einfach nicht spezifiziert. In diesem Fall gibt es kein undefiniertes Verhalten, und der genaue Wert von i wird durch die Implementierung bestimmt.

Undefiniertes Verhalten bei übernommener Adresse

Außerdem kann das Verhalten wird undefiniert, auch wenn die Adresse nicht übernommen wird, wie im C11-Standard angegeben:

"Wenn der L-Wert ein automatisches Objekt bezeichnet Speicherdauer, die mit der Registerspeicherklasse hätte deklariert werden können (ihre Adresse wurde nie übernommen) und dieses Objekt nicht initialisiert ist, ist das Verhalten undefiniert kann abhängig von verschiedenen Faktoren undefiniert sein.

Das obige ist der detaillierte Inhalt vonWarum wird „int i = i;' mit undefiniertem Verhalten kompiliert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage