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;
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!