2013-05-24 20 views
13

Ho le seguenti righe di codice:lvalue richiesto come unario ‘&’ operando

#define PORT 9987 

e

char *ptr = (char *)&PORT; 

Questo sembra funzionare nel mio codice del server. Ma come ho scritto nel mio codice cliente, dà questo messaggio di errore:

lvalue required as unary ‘&’ operand 

Cosa sto facendo male?

+5

Significa che non è possibile prendere l'indirizzo di un numero. – chris

+1

Sono abbastanza sicuro che non funzioni anche nel codice del server - qualcosa deve essere diverso lì. –

+0

@CarlNorum heres my server code. http://pastie.org/7951356 Potresti dare un'occhiata a questo? –

risposta

25

Il preprocessore C è in gioco qui. Dopo che il codice è stato pre-elaborato, questo è come sembra.

char *ptr = (char *)&9987; 

recapito dell'operatore (&) può essere applicato a una variabile e non letterale.

6

Le macro del preprocessore non hanno memoria e al momento della compilazione la macro viene sostituita con il valore. Quindi la cosa reale che succede qui è char *ptr = (char *)&9987 ;, che non è possibile.

+0

Ma sta già lavorando con il mio codice server. –

+1

Penso che potrebbe non essere un #define. – akhil

+2

@IndradhanushGupta '9987' non è lvalue - [leggi qui] (http://tigcc.ticalc.org/doc/opers.html#ref) –