Risposta breve:
Si restituirà una copia di var
e poi subito dopo incrementare il globale var
.
Risposta lunga:
C11 6.5.2.4
"Il risultato del suffisso ++ operatore è il valore dell'operando Come effetto collaterale, il valore dell'oggetto operando è. incrementato .. "./-/ Il calcolo del valore del risultato viene sequenziato prima dell'effetto collaterale di che aggiorna il valore memorizzato dell'operando.
L'5.1.2.3 "esecuzione programma" standard specifica che tutti effetti collaterali devono essere state valutate prima che il programma incontra un punto sequenza. (È possibile trovare un numero di punti di sequenza pari a here).
C'è un punto di sequenza dopo una dichiarazione return
(C11 6.8/4).
Ciò significa che l'espressione var++
è garantita per essere completamente valutata prima che qualsiasi codice in main() continui.
tuo codice macchina sarà simile a questa pseudo codice:
- Conservare una copia locale del
var
sullo stack (o in un registro ecc)
- Aumentare la globale
var
con 1.
- Return dalla sub routine.
- Utilizzare "copy-of-
var
".
Se si fosse utilizzato un incremento di prefisso, l'operazione di aumento sarebbe stata sequenziata prima che la copia fosse archiviata.
Viene restituito il vecchio valore e il valore incrementale viene memorizzato. –
Sì. Sembra che funzioni come previsto. Non sono sicuro che sia il giusto pensare di fare a giudicare dallo standard. – mgoszcz2
Va bene, come le variabili globali. –