Pregunta

Escribí un programa en C con Ubuntu Linux y ahora necesito portarlo a una máquina UNIX (o lo que creo que es una caja de UNIX). Se compila bien en mi Ubuntu con GCC, pero cuando intento compilarlo con GCC en la caja de UNIX, da este error:

a.c: In function `goUpDir':
a.c:44: parse error before `char'
a.c:45: `newDir' undeclared (first use in this function)
a.c:45: (Each undeclared identifier is reported only once
a.c:45: for each function it appears in.)
a.c: In function `goIntoDir':
a.c:54: parse error before `char'
a.c:57: `newDir' undeclared (first use in this function)
a.c:57: `oldDir' undeclared (first use in this function)

Los principales problemas parecen ser el error de análisis antes de char (los demás están relacionados)

44  char newDir[50] = ""; 
54  char* oldDir = (char*)get_current_dir_name();

Estas son solo simples declaraciones de cadenas de estilo C. ¿Hay algún archivo de encabezado que deba incluir para que funcione en UNIX?

P.S. ¿Cuál es el comando para ver qué versión de Unix y qué versión de gcc está utilizando? Saber esto me permitirá ser más específico en mi pregunta.

Gracias

¿Fue útil?

Solución

Si está compilando C pura, las variables deben declararse al principio de las funciones. Menciono esto porque la mayoría de las personas compilan sus programas de C usando compiladores de C ++, que ofrece algunos recursos que normalmente no están disponibles para los compiladores de C pura, el ejemplo más común son las // líneas de comentarios.

Otros consejos

Si desea asegurarse de que su código sea portátil, utilice siempre los errores -pedánticos o -pedativos.

Esto proporcionará advertencias / errores cuando su código se desvíe del cumplimiento de los estándares.

Mientras estamos en el tema. Probablemente debería activar también todas las advertencias. Hay buenas razones por las que el compilador te advierte; cuando se mueve el código de una plataforma a otra, estas advertencias son la fuente de posibles errores, ya que el nuevo hardware / sistema operativo / compilador puede no actuar de la misma manera que el actual.

También use el ejecutable correcto de GCC frontend: g ++ tratará los archivos * .c como archivos C ++ a menos que explícitamente no lo diga. Entonces, si está compilando C real, use gcc no g ++.

  

gcc -pedantic -Wall -Werror * .c
  g ++ -pedantic -Wall -Werror * .cpp

Para ayudarlo con su problema específico, puede ser bueno ver la línea 43. Aunque el error dice que la línea 44 se debe a que la línea que sigue tiene un problema y que el analizador no lo detecta hasta que llega a el primer lexema en la siguiente línea.

¿Cómo copió el archivo? ¿Es posible que hayas insertado algo que no debería estar allí?

BTW: Por favor, arregla el uso de la etiqueta de código en tu código: actualmente es casi imposible de leer sin usar " ver fuente " en mi navegador.

En cuanto a las preguntas finales:

uname -a
gcc -v

Cuando intentes escribir un código portátil, los siguientes indicadores del compilador te dirán sobre muchos problemas antes que llegarás a intentar compilar el código en la siguiente plataforma:

-std=c89 -pedantic -Wall

Si solo necesitas apuntar a GCC en otras plataformas, no en otros compiladores, entonces puedes intentar:

-std=gnu89 -pedantic -Wall

Pero supongo que esto podría permitir las extensiones GNU en un GCC más reciente que no es compatible con uno más antiguo. No estoy seguro.

Tenga en cuenta que, aunque sería bueno si se garantizara -pedantic advertir sobre todos los programas no estándar, no lo es. Todavía hay algunas cosas que echa de menos.

Deberá proporcionarnos más contexto para los errores ... al menos una, probablemente varias líneas antes de las líneas 44 y 54. En una estimación, si nos da el código desde el inicio de la definición de la función antes de la línea 44 (quizás la línea 40 más o menos) a través de la línea 54 (o unas pocas líneas más tarde, tal vez la línea 60), entonces podremos ayudar. char 'en la línea 44; ídem (probablemente el mismo problema) en la línea 54.

La información es insuficiente. El código anterior es al menos tan interesante y uno tiene que saber si se habla de ANSI C89 o ANSI C99. La primera respuesta es incorrecta en ese sentido amplio.

Saludos Friedrich

Steve,

El primer mensaje de error dice " error de análisis antes de 'char' " ;. ¿Cuál es el código que precede char? ¿Es una declaración de función? ¿Incluye algún tipo definido por el usuario o algo por el estilo?

La fuente más probable de este error es que algo poco antes arriba de la línea 44 usa un tipo o macro que se declara en un archivo de encabezado ... ese archivo de encabezado puede diferir entre su propio sistema Ubuntu y el uno que estás tratando de compilar.

¿Qué es UNIX? AIX, Ultrix, Minix, Xenix?

GCC tiene una " - versión " bandera:

gcc --version

Para mostrar la versión de GCC:

gcc --version

Puede ser útil mostrar la función para que podamos ver el código circundante. Ese es a menudo el problema con " error de análisis antes de " errores de tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top