2011-11-17 11 views
13

Sto provando a portare un codice C relativamente moderno in un compilatore più vecchio.Il vecchio compilatore C si strozza su #ifndef #define

Questo compilatore (DICE), sembra, bobine sul primo file di intestazione e la prima occorrenza di questo linguaggio:

#ifndef SOMETHING 
#define SOMETHING 

... 

#endif /* SOMETHING */ 

muore sulla seconda riga nell'intestazione con: DCPP: "../../code/someheader.h" L:2 C:0 Error:39 Syntax Error

La modifica a #define SOMETHING 1 non ha fatto alcuna differenza.

Quindi ho davvero due domande, sto usando DICE con l'opzione sbagliata o qualcosa del genere, o i programmatori C hanno usato un altro idioma uguale a ifndef-define ai vecchi tempi?

Riferimenti:

+2

Se è [questo compilatore DICE] (http://www.obviously.com/amiga/), allora sicuramente usato per funzionare con le tipiche protezioni di inclusione. – tinman

+1

La mia prima edizione (21 ° stampa) K & R descrive #ifndef a pagina 208, quindi è in circolazione da un po 'di tempo. –

+2

Ooh, quella domanda riporta indietro i ricordi! Ho persino pagato la versione shareware. :) Oltre a ciò, dovrebbe funzionare, altrimenti tutte le intestazioni di sistema fallirebbero pure. –

risposta

16

Se è this C compiler poi guardando il sources (src \ DCPP \ cpp.c) si può vedere che newlines includono solo il carattere ritorno a capo e non il carattere di avanzamento riga.

Se si ha una linea termina con CRLF poi quando il compilatore strisce gli spazi all'inizio della linea, non striscia l'avanzamento prima della # che è un errore di sintassi, poiché le direttive del preprocessore iniziano # deve essere primo carattere non di spaziatura nella linea.

+3

Heh, mi hai battuto di un secondo :) Cancellerò la mia risposta, mi piace il rappresentante. – interjay

+0

@interjay: Grazie, molto sportivo da parte tua :) – tinman

+0

Grazie a tutti, bello vedere così tanti esperti di C e di Amiga contaminati.:-) –

3
#if SOMETHING 
#else 




#endif 

potrebbe funzionare ovunque

+0

aha! proverò che –

+0

Grazie! Non era così, ma potrebbe aiutare un altro compilatore. –

Problemi correlati