Forum: Mikrocontroller und Digitale Elektronik Frage zu C18 Compiler


von martinw (Gast)


Lesenswert?

Hallo

Also wollte heute mal was in C schreiben für den PIC18. Hab mir die
Student Version geholt und installiert. Hab schon früher mit dem C30
gearbeitet, ging auch problemlos.

Nur mit dem C18 hab ich so meine Nöte.
Also wenn ich habe eine main.c ein Lcd.c und ein Lcd.h
Alle sind eingebunden. Das Problem ist, sobald ich in Lcd.c eine
Variable, egal welchen Typs, definieren will spuckt er mir einen Syntax
Error aus. Hat da jemand einen Tip für mich was da falsch sein könnte?
Prozessor Include Datei wurde auch includiert... wie gesagt im C30 ging
das problemlos...

Und dann noch eine Frage. Muss man beim C18 bei einer Funktion, der
nichts übergeben wird in den Klammern void schreiben oder kann man es
auch weglassen? Bei mir spuckt er da nämlich dann aus dass er den
Funktionsprototyp nicht finden kann... beim C30 ging das auch ohne...

Danke

MfG Martin W

von Rufus T. Firefly (Gast)


Lesenswert?

In ANSI-C (C90) muss eine leere Argumentenliste einer Funktion mit dem
Schlüsselwort void gekennzeichnet werden.
Im antediluvianischen K&R-C war das nicht erforderlich (aber das kannte
ja weder Prototypen noch mehr als eine äußerst rudimentäre
Typüberprüfung), ebenso lässt C++ das Weglassen zu.

Beziehen sich Deine Bezeichner "C18" und "C30" etwa auf den
Microchip MPLAB C-Compiler?

Das sollten eigentlich beide ANSI-C-Compiler sein.

"Das Problem ist, sobald ich in Lcd.c eine
Variable, egal welchen Typs, definieren will spuckt er mir einen
Syntax
Error aus."

Source posten, exakte Fehlermeldung posten.

von martinw (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Also das mit dem "void" ist gut zu wissen, bin vom C++ programmieren
verwöhnt...

Habe mal einen Screenie angehängt wo der Fehler auftritt, ich hoffe man
sieht alles was nötig ist...

MfG Martin W

von Paule (Gast)


Lesenswert?

Moinsen,
Probier mal das unsigned int vor den befehl Delay_Lcd zu schreiben.
Sollte eigentlich auch so gehen, hatte mit sowas allerdings auch schon
Probleme mit dem CCS Compiler.

Paule

von martinw (Gast)


Lesenswert?

Hallo

Also ich hab probiert das Delay_Lcd mit dem Rückgabewert int
einzurichten, kommt aber der gleiche Fehler, wäre auch krass wenn man
keine Funktionen mehr machen könnte die nichts zurückgeben.
Also ich verstehe das ganze einfach net. Ich mein das ist ein simpler
Funktionsaufruf...
Wenn ich denn Funktionsaufruf in Zeile 21 Auskommentiere, dann gibt er
mir keinen Fehler mehr, erst wieder viel weiter unten... muss also an
dem Aufruf liegen...

Mit den Compiler Setting kann ja auch nnicht wirklich was falsch sein
oder? Ich mein ich hab eh alles durchprobiert...

MfG Martin W

von Paule (Gast)


Lesenswert?

Ich meinte eigentlich was anderes:
Vertausche mal die Zeilen 23 und 21 in deiner LCD_HD44780.c

von Rufus T. Firefly (Gast)


Lesenswert?

Paule hat recht.

In C dürfen in einem Block keine Variablendefinitionen auf andere Dinge
erfolgen.

  int bla(void)
  {
    machwas();

    int variable;

  ...

So etwas ist nur in C++ zulässig.

von martinw (Gast)


Lesenswert?

Hallo

Tatsächlich! Also das heißt ich muss alle Variablen am Anfang des
Blocks definieren... Warum bitte ist das so?
Also ich muss sagen von C++ auf C umzusteigen ist wahrscheinlich
schwieriger als von C auf C++.... Immer kommt man auf neue Sachen drauf
die man nicht mehr machen darf ;-)

Danke!!!!!!

MfG Martin W

von martinw (Gast)


Lesenswert?

Hallo nochmal...

Wenn das mit den Variablen in C nicht funktioniert? Warum hat es dann
mit dem C30 geklappt?

MfG Martin W

von Markus (Gast)


Lesenswert?

Nur mal geraten:
Nicht alle Compiler sind 200% Standardkonform. Es macht ja durchaus
Sinn eine solche Einschränkung wegzulassen (man verliert allerdings
etwas Portabilität). Genauso verstehen viele C-Compiler schon seit
langem // als Kommentarzeichen, obwohl das meines Wissens erst im
C99-Standard definiert wurde.

Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.