Pergunta

Eu escrevi um programa em C com Ubuntu Linux e agora eu preciso transportá-lo até uma máquina UNIX (ou o que eu acredito ser uma caixa de UNIX). Ele compila bem no meu Ubuntu com o GCC, mas quando eu tento compilá-lo com GCC na caixa de UNIX, dá este erro:

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)

Os principais problemas parecem ser o erro de análise antes char (os outros estão relacionados)

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

Estas são apenas simples de estilo C cordas declarações. Existe um arquivo de cabeçalho que eu preciso incluir para obtê-lo para trabalhar em UNIX?

P.S. Qual é o comando para ver qual a versão do Unix e qual versão do gcc que você está usando? Sabendo isto irá permitir-me a ser mais específico na minha pergunta.

Graças

Foi útil?

Solução

Se você está compilando puro C, variáveis ??devem ser declaradas no início das funções. Digo isto porque a maioria das pessoas compilar seus programas em C usando compiladores C ++, que oferece, em seguida, alguns recursos normalmente não disponíveis para compiladores C pura, o exemplo mais comum é as // linhas de comentário.

Outras dicas

Se você quer ter certeza de seu código é portátil utilize sempre o -pedantic ou -pedantic-erros.

Isto irá fornecer avisos / erros onde seus estáticas código de cumprimento de normas.

Enquanto estamos no assunto. Você provavelmente deve também ligar todas as advertências. Há boas razões para que o compilador avisa; quando mover o código de uma plataforma para outra esses avisos são a fonte de potenciais erros como o novo hardware / OS / Compiler não pode agir o mesmo que o seu atual.

Também usar o GCC correta frontend executável: g ++ irá tratar arquivos * .c como arquivos C ++ menos que você diga explicitamente não muito. Então, se você está compilando verdadeiro C, em seguida, usar o gcc não g ++.

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

Para ajudar com o seu problema específico pode ser bom ver linha 43. Embora o erro diz linha 44 um monte de problemas são causados ??pela linha de continuar tendo um problema eo problema não ser detectado pelo analisador até chegar ao o primeiro lexeme na próxima linha.

Como você copiar o arquivo de novo? É possível que você inseriu algo que não deveria estar lá?

BTW:. Corrija-se o uso do tag de código em seu código - é actualmente quase impossível de ler sem usar "view source" no meu navegador

Quanto você acaba perguntas:

uname -a
gcc -v

Ao tentar escrever código portátil, as seguintes bandeiras de compilador vai falar sobre um monte de problemas antes você chegar tão longe como tentar compilar o código da plataforma seguinte:

-std=c89 -pedantic -Wall

Se você só precisa GCC alvo em outras plataformas, e não quaisquer outros compiladores, então você pode tentar:

-std=gnu89 -pedantic -Wall

Mas eu acho que isso pode permitir que extensões GNU em um GCC mais recente que não são suportados em um mais antigo. Eu não tenho certeza.

Note que, apesar de que seria bom se -pedantic foi garantido para alertar sobre todos os programas não-padrão, não é. Há ainda algumas coisas ele perde.

Você vai ter que nos fornecer mais contexto para os erros ... pelo menos um, provavelmente várias linhas antes linhas 44 e 54. Em uma suposição, se você nos dar o código desde o início da definição da função antes da linha 44 (talvez linha 40 ou assim) até linha 54 (ou algumas linhas depois - talvez linha 60 - então poderemos ser capazes de ajudar algo se passa com as informações antes da linha 44 que está causando isso a esperar algo diferente de '. char' na linha 44;. idem (provavelmente o mesmo problema) na linha 54

A informação é insuficiente. O código de cima é pelo menos tão intersting e tem de se saber se aqueles fala sobre ANSI C89 ou ANSI C99. A primeira resposta é errada nesse sentido amplo.

Saudações Friedrich

Steve,

A primeira mensagem de erro diz "parse error before 'char'". Qual é o código que precede caractere? É uma declaração de função? Será que inclui quaisquer tipos definidos pelo usuário ou qualquer coisa do tipo?

A fonte mais provável desse erro é que algo pouco acima linha 44 usa um tipo ou macro que é declarada em um arquivo de cabeçalho ... que arquivo de cabeçalho pode diferir entre o seu próprio sistema Ubuntu eo que você está tentando compilar diante.

O UNIX é? AIX, Ultrix, Minix, Xenix?

GCC tem um "--version" bandeira:

gcc --version

Para exibir a versão do GCC:

gcc --version

Pode ajudar a mostrar a função para que pudéssemos ver o código circundante. Isso é muitas vezes o problema com "Erro de análise antes de" erros de tipo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top