Ciao a tutti,
vi sottopongo una "banale" macro definita in un file header. Di seguto riporto la sua definizione:
#define square(x) x * x
In un primo caso sembra poter essere adeguata, ad esempio:
int z = 5;
printf("square(%d) = %d\n", square(z));
In questo caso varò square(5) = 25;
Ma se eseguo il seguente codice la macro risulta palesemente errata:
int z = 5;
printf("Risultato di square(z+1) %d\n", sqaure(z+1));
Infatti in questo caso il risultato è 11. Mi aiutate a capire come avviene al sostituzione?
Se correggo la macro in
#define square(x) (x) * (x)
Allora funziona in tutti i casi.
Nel caso errato sia sembrerebbe fare (z+1) + z = 11... Ma come è possibile?
Grazie mille