Dieser Code kompiliert, aber ich habe Fehler eine Laufzeit in Visual Studio:eine Variable mit dem gleichen Namen in verschiedenen Räumen
Laufzeit 3 # Prüfungsfehler - die Variable ‚x‘ verwendet wird, ohne initialisiert ...
int x = 15;
int main()
{
int x = x;
return 0;
}
ich verstehe nicht, dass das Verhalten ... in dem Fehlerfeld, wenn ich das Programm klicken weiter fortgesetzt und x einen beschädigten Inhalt (wie -8556328
statt 15
).
Warum funktioniert dieser Code ohne ein Problem, und das Array int ist gut deklariert?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
Sie markierten sowohl C und C++. Was hast du kompiliert? –
Einige interessante Fakten: 'gcc 4.8.4', kompiliert und dieses Programm kann mit' -Wall -Wextra -pedantic' ausgeführt werden. 'clang 7.0.0' kompiliert es und kann so ausgeführt werden, wie es ist. Wenn jedoch 'printf ("% d \ n ", x);' nach 'int x = x;' (ich nehme jede tatsächliche Verwendung von 'x') hinzugefügt wird, gibt der Compiler die freundlichere Warnung aus:' warning: variable 'x' ist nicht initialisiert, wenn es innerhalb seiner eigenen Initialisierung [-Wuninitialized] 'verwendet wird. 'gcc' kompiliert und führt es sogar mit dem' printf' und dem Ausdruck '0'. Das Ausführen des Programms durch Valgrind gibt jedoch 'Bedingter Sprung oder Bewegung hängt von nicht initialisierten Wert (en) ' – Joakim
@Joakim: Interessant; Danke für die Ergebnisse.Stehen GCC und Clang innerhalb ihrer Rechte, d. H. Ist das kanonisch undefiniert? –