Question

J'ai écrit un programme en C avec Ubuntu Linux et je dois maintenant le transférer sur une machine UNIX (ou ce que je pense être une boîte UNIX). Il compile bien sur mon Ubuntu avec GCC, mais lorsque je tente de le compiler avec GCC sous UNIX, cela donne cette erreur:

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)

Les problèmes principaux semblent être l’erreur d’analyse avant char (les autres sont liés)

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

Ce ne sont que de simples déclarations de chaînes de style C. Dois-je inclure un fichier d’en-tête pour le faire fonctionner sous UNIX?

P.S. Quelle est la commande pour voir quelle version d'Unix et quelle version de gcc vous utilisez? Sachant que cela me permettra d’être plus précis dans ma question.

Merci

Était-ce utile?

La solution

Si vous compilez du C pur, les variables doivent être déclarées au début des fonctions. Je le mentionne car la plupart des gens compilent leurs programmes C à l’aide de compilateurs C ++, qui offrent alors des ressources qui ne sont normalement pas disponibles pour les compilateurs C purs, l’exemple le plus courant étant les // lignes de commentaire.

Autres conseils

Si vous voulez vous assurer que votre code est portable, utilisez toujours les erreurs -pedantic ou -pedantic.

Ceci fournira des avertissements / erreurs lorsque votre code s'écarte de la conformité aux normes.

Pendant que nous sommes sur le sujet. Vous devriez probablement aussi activer tous les avertissements. Il y a de bonnes raisons pour lesquelles le compilateur vous avertit; Lorsque vous déplacez du code d’une plate-forme à une autre, ces avertissements sont la source de bogues potentiels, car le nouveau matériel, le nouveau système d’exploitation et le compilateur risquent de ne pas agir de la même façon que votre actuel.

Utilisez également l'exécutable frontal GCC approprié: g ++ Traitera les fichiers * .c comme des fichiers C ++, à moins que vous ne le leur indiquiez explicitement. Donc, si vous compilez du C réel, utilisez gcc, pas g ++.

  

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

Pour vous aider avec votre problème spécifique, il peut être agréable de voir la ligne 43. Bien que l’erreur indique la ligne 44, de nombreux problèmes sont causés par le problème de la ligne précédente et par le fait que le problème n’a pas été détecté par l’analyseur le premier lexème de la ligne suivante.

Comment avez-vous copié le fichier? Est-il possible que vous insériez quelque chose qui ne devrait pas être là?

BTW: Modifiez votre utilisation de la balise de code dans votre code. Il est actuellement presque impossible de le lire sans utiliser " view source " dans mon navigateur.

Quant à vous fin des questions:

uname -a
gcc -v

Lorsque vous essayez d'écrire du code portable, les drapeaux suivants du compilateur vous renseigneront sur de nombreux problèmes avant que n'essayiez pas de compiler le code sur la plate-forme suivante:

-std=c89 -pedantic -Wall

Si vous devez uniquement cibler GCC sur d'autres plates-formes, pas avec d'autres compilateurs, vous pouvez essayer:

-std=gnu89 -pedantic -Wall

Mais je suppose que cela pourrait autoriser des extensions GNU sur un nouveau GCC qui ne sont pas prises en charge sur un ancien. Je ne suis pas sûr.

Notez que s'il serait bien que -pedantic ait la garantie d'avertir de tous les programmes non standard, ce n'est pas le cas. Il manque encore des choses.

Vous devrez nous fournir plus de contexte pour les erreurs ... au moins une, probablement plusieurs lignes avant les lignes 44 et 54. Si vous nous donnez le code depuis le début de la définition de la fonction avant la ligne 44 (peut-être la ligne 40 ou plus) jusqu'à la ligne 54 (ou quelques lignes plus tard - peut-être la ligne 60 - alors nous pourrons peut-être vous aider. Quelque chose se passe avec les informations avant la ligne 44 qui l'oblige à attendre autre chose que ' caractère 'à la ligne 44; idem (probablement le même problème) à la ligne 54.

L'information est insuffisante. Le code ci-dessus est au moins aussi intéressant et il faut savoir si on parle de ANSI C89 ou ANSI C99. La première réponse est fausse au sens large.

Cordialement Friedrich

Steve,

Le premier message d'erreur indique " erreur d'analyse avant 'char' ". Quel est le code qui précède char? Est-ce une déclaration de fonction? Inclut-il des types définis par l'utilisateur ou quelque chose du genre?

La source la plus probable de cette erreur est que quelque chose sous peu au-dessus de la ligne 44 utilise un type ou une macro déclarée dans un fichier d'en-tête ... ce fichier d'en-tête peut différer entre votre propre système Ubuntu et le celui que vous essayez de compiler.

Qu'est-ce qu'un UNIX? AIX, Ultrix, Minix, Xenix?

GCC a une "version -" " drapeau:

gcc --version

Pour afficher la version de GCC:

gcc --version

Cela pourrait aider de montrer la fonction pour que nous puissions voir le code qui l’entoure. C’est souvent le problème de " erreur d’analyse avant " erreurs de type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top