Frage

schrieb ich ein Programm in C mit Ubuntu Linux und jetzt muß ich Port es über zu einem UNIX-Rechner (oder das, was ich glaube, eine UNIX-Box zu sein). Es kompiliert auf meinem Ubuntu mit GCC, aber wenn ich versuche, es auf der UNIX-Box mit GCC zu kompilieren, gibt es diesen Fehler:

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)

Die Hauptprobleme scheinen die Parse-Fehler vor char (die anderen sind ähnlich)

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

Dies sind nur einfache C-Strings Erklärungen. Gibt es eine Header-Datei, die ich hinzufügen müssen, um es in UNIX zu arbeiten?

P. S. was ist der Befehl, um zu sehen, welche Version von Unix und welche Version von gcc Sie verwenden? Mit diesem Wissen wird mir erlauben, präziser in meiner Frage zu sein.

Danke

War es hilfreich?

Lösung

Wenn Sie reine C kompilieren, Variablen müssen auf dem beggining der Funktionen deklariert werden. Ich erwähne dies, weil die meisten Menschen ihre C-Programme ++ Compiler mit C kompilieren, die einige Ressourcen bietet dann normalerweise nicht zur Verfügung reinen C-Compiler, die häufigste Beispiel die // Kommentarzeilen zu sein.

Andere Tipps

Wenn Sie wollen sicherstellen, dass Ihr Code portabel ist immer die -pedantic oder -pedantic-Fehler verwendet werden.

Dies wird Warnungen / Fehler in dem der Code von Standardkonformität verirrt.

Während wir über das Thema sind. Sie sollten wahrscheinlich auch wiederum auf alle Warnungen. Es gibt gute Gründe, warum der Compiler Sie warnt; wenn Code von einer Plattform zur anderen zu bewegen sind diese Warnungen die Quelle potentieller Fehler als die neue Hardware / OS / Compiler kann nicht das gleiche wie Ihr gegenwärtiges handeln.

Nutzen Sie auch die ausführbare Datei korrekt GCC Frontend: g ++ behandeln * .c Dateien wie C ++ Dateien, wenn Sie es ausdrücklich sagen, nicht zu. Also, wenn Sie kompilieren reale C dann gcc nicht g ++.

  

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

mit Ihrem spezifischen Problem zu helfen, ist es schön sein kann Linie 43 zu sehen Obwohl der Fehler sagt Linie 44 eine Menge Probleme, die durch das Verfahren Leitung verursacht werden, ein Problem und das Problem mit nicht vom Parser erkannt wird, bis Sie zu erhalten die ersten lexeme in der nächsten Zeile.

Wie haben kopieren Sie die Datei über? Ist es möglich, dass Sie eingefügt etwas, das nicht da sein sollte?

BTW:. Bitte korrigieren Sie Ihre Nutzung des Code-Tages in Ihrem Code - es ist derzeit fast unmöglich, ohne „Quelltext anzeigen“ in meinem Browser zu lesen

Was Sie am Ende Fragen:

uname -a
gcc -v

Beim Versuch, portablen Code schreiben zu können, werden die folgenden Compiler-Flags werden Sie über eine Menge Probleme sagen vor Sie erhalten bis zu versuchen, den Code auf die nächste Plattform zu kompilieren:

-std=c89 -pedantic -Wall

Wenn Sie nur GCC auf anderen Plattformen müssen, aber nicht auf andere Compiler, dann könnten Sie versuchen:

-std=gnu89 -pedantic -Wall

Aber ich würde vermuten, könnte diese GNU-Erweiterungen auf einem neuen GCC erlauben, die nicht auf einem älteres unterstützt werden. Ich bin nicht sicher.

Beachten Sie, dass, obwohl es schön wäre, wenn -pedantic garantiert wurde über alle Nicht-Standard-Programme zu warnen, ist es nicht. Es gibt noch einige Dinge, die es verpasst.

In Kürze erhalten Sie haben uns für die Fehler mit mehr Kontext zu schaffen, ... mindestens einen, wahrscheinlich mehr Zeilen vor Linien 44 und 54. Bei einer Vermutung, wenn Sie uns den Code aus dem Beginn der Funktionsdefinition geben, bevor Zeile 44 (vielleicht Linie 40 oder so) bis 54 (oder ein paar Zeilen später Zeile - vielleicht Linie 60 - dann können wir in der Lage sein zu helfen, etwas ist mit den Informationen, bevor Zeile bis 44, die es verursacht, etwas anderes als "zu erwarten. char‘in Zeile 44;. ditto (wahrscheinlich das gleiche Problem) bei Zeile 54

Die Information ist nicht ausreichend. Der obige Code ist mindestens so interessant geschnitten und man muss wissen, ob solche Gespräche über ANSI C89 oder ANSI C99. Die erste Antwort ist falsch in diesem weiten Sinne.

Viele Grüße Friedrich

Steve,

Die erste Fehlermeldung lautet "parse error before 'char'". Was ist der Code, vorausgeht char? Ist es eine Funktionsdeklaration? Ist es gehören alle benutzerdefinierten Typen oder etwas dergleichen?

Die wahrscheinlichste Quelle für diesen Fehler ist, dass etwas kurz oben Linie 44 einen Typen oder Makro verwendet, die in einer Header-Datei deklariert sind ... dass die Header-Datei zwischen Ihrem eigenen Ubuntu-System unterscheiden kann und die man Sie versuchen, auf kompilieren.

Was UNIX ist es? AIX, Ultrix, Minix, Xenix?

GCC hat eine "-Version" Flagge:

gcc --version

, um die GCC-Version anzuzeigen:

gcc --version

Es könnte helfen, die Funktion zu zeigen, so dass wir den umgebenden Code sehen können. Das ist oft das Problem mit „Parse-Fehler vor“ Typfehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top