2011-11-17 14 views
13

Estoy intentando trasladar un código C relativamente moderno a un compilador anterior.El compilador de Old C se atora en #ifndef #define

Este compilador (DICE), al parecer, se ahoga con el primer archivo de cabecera y la primera aparición de este lenguaje:

#ifndef SOMETHING 
#define SOMETHING 

... 

#endif /* SOMETHING */ 

muere en la segunda línea de la cabecera con: DCPP: "../../code/someheader.h" L:2 C:0 Error:39 Syntax Error

Cambiar a #define SOMETHING 1 no hizo diferencia.

Tengo realmente dos preguntas, ¿estoy usando DICE con la opción incorrecta o algo así, o ¿Los programadores C usaron algún otro modismo igual a ifndef-define en los viejos tiempos?

Referencias:

+2

Si se trata de [este compilador de DICE] (http://www.obviously.com/amiga/), entonces eso ciertamente solía funcionar con protectores de inclusión típicos. – tinman

+1

Mi primera edición (21ª impresión) K & R describe #ifndef en la página 208, por lo que ha estado disponible por un tiempo. –

+2

Ooh, esa pregunta trae recuerdos! Incluso pagué por la versión de shareware. :) Además de eso, debería funcionar, de lo contrario, todos los encabezados del sistema fallarían también. –

Respuesta

16

Si es this C compiler continuación, mirando el sources (src \ DCPP \ cpp.c) se puede ver que las nuevas líneas sólo incluyen el carácter de retorno de carro y no el carácter de salto de línea.

Si usted tiene una línea que termina con CRLF a continuación, cuando el compilador quita el espacio en blanco al principio de la línea, no se tira el salto de línea antes de la # que es un error de sintaxis, ya que las directivas de preprocesador comenzando con # debe ser el primer personaje que no sea de espacio en blanco en la línea.

+3

Heh, me has vencido por un segundo :) Eliminaré mi respuesta, disfrutaré de la reputación. – interjay

+0

@interjay: Gracias, muy deportivo por su parte :) – tinman

+0

Gracias a todos, es bueno ver a tantas personas con conocimientos de C y Amiga.:-) –

3
#if SOMETHING 
#else 




#endif 

podría funcionar en todas partes

+0

aha! intentará eso –

+0

¡Gracias! Eso no fue, pero podría ayudar a otro compilador. –

Cuestiones relacionadas