2011-12-19 3 views
5

Sto scrivendo un interprete brainfuck in C, e sto avendo un po 'di problemi con l'uso di qualcosa a cui non sono abituato. In brainfuck, una virgola (,) è essenzialmente getchar(). Così ho il seguente codice:errore: un'etichetta può essere solo una parte di una dichiarazione

//This is just ptr 
static char *ptr; 

switch (command) 
{ 
    case ',': 
    *ptr=getchar(); // Here's the code causing error 
    break; 
} 

gcc getta error: a label can only be part of a statement and a declaration is not a statement di me quando provo a compilare questo.

Qualche idea? (Mi dispiace per questo, non così familiarità con questo errore)

+6

si trova all'interno di un'istruzione 'switch'? – Constantinius

+0

Mostra altro codice; e forse aggiungere un punto e virgola ';' alla linea per errore. –

+0

Sì, è in un interruttore, suppongo di averlo lasciato fuori. – MadPumpkin

risposta

7

Credo che si intende

*ptr = getchar(); 

invece di

ptr*=getchar(); 

perché *= mezzi moltiplicare il valore sul lato sinistro con il valore su il lato destro e assegnare questo valore a sinistra. Tuttavia, si desidera dereferenceptr e scrivere il risultato di getchar in quella posizione.


Diverso da quello che il codice compila perfettamente bene con la mia versione di gcc (se dichiaro command da qualche parte), quindi non sono, ovviamente, che ci mostra un esempio completo.

+0

Sì, errore mio, l'ho corretto nel mio codice anche adesso. Mostra lo stesso errore. – MadPumpkin

+0

ptr * = getchar() darebbe un errore diverso: 'errore: operandi non validi per binario * (avere char * e int)' Non quello nella domanda. – Karthik

+0

@Karthik: buon punto. Ma potrebbero essere stati correlati. Altrimenti, non riesco a vedere un errore nel codice presentato. – bitmask

1

Questo è stato il mio errore interamente, avevo precedentemente commentato il codice prima di esso. Ho pensato che questo fosse il codice che causava l'errore dovuto a me che commentava entrambi i codici allo stesso tempo e non causava questo errore. Comunque ho provato a commentare entrambi e ora capisco perché.

Era una questione di FILE e utilizzava la mia ricerca in un altro caso.

+0

Se potessi avere un nickel ogni volta che ho riscontrato un errore di sintassi C avvolto come un regalo di Natale all'interno di un altro errore di sintassi, sarei un uomo molto ricco. C ha il suo up, e il suo downs come questo. –