Penso che per lo più tu abbia risposto alla tua stessa domanda. Potrei apportare una piccola modifica al tuo fraseggio e sostituire "variabile temporanea" con "rvalue" come menzionato da C.Gibbons.
I termini variabile, argomento, variabile temporanea e così via diventeranno più chiari man mano che imparerai a conoscere il modello di memoria di C (questa sembra una bella panoramica: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
Il termine "rvalue" può sembrare opaco quando sei appena agli inizi, quindi spero che quanto segue aiuti a sviluppare un'intuizione al riguardo.
Lvalue / rvalue stanno parlando dei diversi lati di un segno di uguale (operatore di assegnazione): lvalue = lato sinistro (L minuscola, non "uno") rvalue = lato destro
Imparare un po 'su come C usa la memoria (e i registri) sarà utile per capire perché la distinzione è importante. A grandi linee , il compilatore crea un elenco di istruzioni in linguaggio macchina che calcolano il risultato di un'espressione (il rvalue) e poi inserisce quel risultato da qualche parte (il lvalue). Immagina un compilatore che si occupi del seguente frammento di codice:
x = y * 3
Nello pseudocodice di assemblaggio potrebbe assomigliare a questo esempio di giocattolo:
load register A with the value at memory address y
load register B with a value of 3
multiply register A and B, saving the result in A
write register A to memory address x
L'operatore ++ (e la sua controparte) necessita di un "da qualche parte" da modificare, essenzialmente tutto ciò che può funzionare come valore l.
Comprendere il modello di memoria C sarà utile perché avrai un'idea migliore nella tua testa su come gli argomenti vengono passati alle funzioni e (eventualmente) come lavorare con l'allocazione dinamica della memoria, come la funzione malloc (). Per ragioni simili potresti studiare qualche semplice programmazione in assembly ad un certo punto per avere un'idea migliore di ciò che sta facendo il compilatore. Inoltre, se stai usando gcc , l' opzione -S "Ferma dopo la fase di compilazione corretta; non assemblare". può essere interessante (anche se consiglierei di provarlo su un piccolo frammento di codice).
Per inciso: l'istruzione ++ esiste dal 1969 (sebbene sia iniziata nel predecessore di C, B):
L'osservazione di (Ken Thompson) (era) che la traduzione di ++ x era minore di quella di x = x + 1 ".
Seguendo questo riferimento su wikipedia, verrai portato a un interessante articolo di Dennis Ritchie (la "R" in "K&R C") sulla storia del linguaggio C, collegato qui per comodità: http://www.bell-labs.com/ usr / dmr / www / chist.html dove puoi cercare "++".