Acho que você respondeu principalmente à sua própria pergunta. Eu poderia fazer uma pequena mudança em seu fraseado e substituir "variável temporária" por "rvalue", como C. Gibbons mencionou.
Os termos variável, argumento, variável temporária e assim por diante ficarão mais claros conforme você aprende sobre o modelo de memória do C (parece uma boa visão geral: https://www.geeksforgeeks.org/memory-layout-of-c-program/ )
O termo "rvalue" pode parecer opaco quando você está apenas começando, então espero que o seguinte ajude a desenvolver uma intuição sobre ele.
Lvalue / rvalue estão falando sobre os diferentes lados de um sinal de igual (operador de atribuição): lvalue = lado esquerdo (L minúsculo, não um "um") rvalue = lado direito
Aprender um pouco sobre como C usa a memória (e os registros) será útil para ver por que a distinção é importante. Em grandes pinceladas , o compilador cria uma lista de instruções em linguagem de máquina que calculam o resultado de uma expressão (o rvalue) e, em seguida, coloca esse resultado em algum lugar (o lvalue). Imagine um compilador lidando com o seguinte fragmento de código:
x = y * 3
No pseudocódigo de montagem, pode ser parecido com este exemplo de brinquedo:
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
O operador ++ (e sua contraparte) precisa de um "algum lugar" para modificar, essencialmente qualquer coisa que possa funcionar como um lvalue.
Entender o modelo de memória C será útil porque você terá uma ideia melhor em sua cabeça sobre como os argumentos são passados para funções e (eventualmente) como trabalhar com alocação de memória dinâmica, como a função malloc (). Por razões semelhantes, você pode estudar alguma programação em assembly simples em algum ponto para ter uma ideia melhor do que o compilador está fazendo. Além disso, se você estiver usando o gcc , a opção -S "Parar após o estágio de compilação adequada; não montar." pode ser interessante (embora eu recomende tentar em um pequeno fragmento de código).
Apenas como um aparte: a instrução ++ existe desde 1969 (embora tenha começado no predecessor do C, B):
A observação (de Ken Thompson) (era) de que a tradução de ++ x era menor do que x = x + 1. "
Seguir essa referência da Wikipedia levará você a um artigo interessante de Dennis Ritchie (o "R" em "K&R C") sobre a história da linguagem C, linkado aqui para sua conveniência: http://www.bell-labs.com/ usr / dmr / www / chist.html onde você pode procurar por "++".