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
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.
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
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
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
Ich meinte eigentlich was anderes: Vertausche mal die Zeilen 23 und 21 in deiner LCD_HD44780.c
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.
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
Hallo nochmal... Wenn das mit den Variablen in C nicht funktioniert? Warum hat es dann mit dem C30 geklappt? MfG Martin W
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.