www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu C18 Compiler


Autor: martinw (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: martinw (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Paule (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: martinw (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paule (Gast)
Datum:

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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: martinw (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: martinw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal...

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

MfG Martin W

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.