Domanda

Ho questa domanda, che pensavo prima, ma ho capito che non è banale rispondere

int x = x + 1;
int main() {
  return x;
}
.

La mia domanda è se il comportamento del programma è definito o indefinito se è valido affatto.Se è definito, è il valore del x noto in main?

È stato utile?

Soluzione

Sono abbastanza sicuro che è definito, e X dovrebbe avere il valore 1. §3.6.2 / 1 dice: "Gli oggetti con la durata della memoria statica (3.7.1) devono essere inizializzati a zero (8.5) prima di qualsiasi altra inizializzazioneha luogo. "

Dopo, penso che sia tutto piuttosto semplice.

Altri suggerimenti

.

La mia domanda è se il comportamento del programma è definito o indefinito se è valido affatto.Se è definito, è il valore di X noto in Main?

Questo codice non è assolutamente pulito, ma per me dovrebbe funzionare prevedibilmente.

int x Mette la variabile nel segmento dei dati che è definito per essere pari a zero al programma.Prima di main(), vengono chiamati inizializzatori statici.Per x che è il codice x = x + 1.x = 0 + 1 = 1.Quindi il principale () ritornerebbe 1.

Il codice funzionerebbe sicuramente in modo imprevedibile se x è una variabile locale, assegnata in pila.Stato di pila, a differenza del segmento dei dati, è praticamente garantito per contenere rifiuti indefiniti.

La variabile 'x' in memorizzata nel .bss, che è riempito con 0S quando si carica il programma.Di conseguenza, il valore di "X" è 0 quando il programma viene caricato in memoria.

Quindi prima che viene chiamato a Main, "X= X + 1" viene eseguito.

Non so se è valido o meno, ma il comportamento non è indefinito.

Prima che la chiamata principale X deve essere inizializzata a 0 pertanto il valore è necessario essere 1 uno che inserisci principale, e ritornerete 1. È un comportamento definito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top