Questo codice compila, ma ho un errore di tempo di esecuzione in Visual Studio:Utilizzando una variabile con lo stesso nome in diversi spazi
di run-time fallimento di controllo # 3 - la variabile 'x' viene utilizzato senza essere inizializzato ...
int x = 15;
int main()
{
int x = x;
return 0;
}
non capisco che il comportamento ... nella finestra di errore quando si fa clic continuare il programma riprende e x ha un contenuto corrotto (come -8556328
invece di 15
).
Perché questo codice funziona senza problemi e l'array int è ben dichiarato?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
Hai taggato sia C che C++. Quale hai compilato? –
Alcuni fatti interessanti: 'gcc 4.8.4', compila e questo programma può essere eseguito con' -Wall -Wextra -pedantic' acceso. 'clang 7.0.0' lo compila e può essere eseguito così com'è. Tuttavia se 'printf ("% d \ n ", x);' viene aggiunto dopo 'int x = x;' (suppongo che l'uso effettivo di 'x'), il compilatore fornisce l'avviso più amichevole:' warning: variabile 'x' non è inizializzato se usato all'interno della propria inizializzazione [-Wininitialized] '. 'gcc' ancora compila e lo esegue anche con' printf' e stampato '0'. Tuttavia, l'esecuzione del programma tramite valgrind fornisce 'Il salto condizionato o lo spostamento dipende dal/i valore/i non inizializzato/i' – Joakim
@Joakim: Interessante; grazie per i risultatiGCC e Clang sono nei loro diritti, cioè questo comportamento canonicamente indefinito? –