Ich hab folgendes als Teil in meinem Programm: enum LEDDIR { LEFT2RIGHT, RIGHT2LEFT}; enum BOOLIAN {FALSE, TRUE}; int Switch_Count=0; LEDTris = 0; //PORT D output SWTris = 1; // PORT B Pin 0 Input ADBIT = 0b0111; // PORT B Digital PULLUP =1; //Pullup aus enum LEDDIR Dir; enum BOOLIAN SwitchPressed; Dir = LEFT2RIGHT; SwitchPressed = FALSE; hab es soweit wie es geht in einzelne Schritte verpackt aber beim compilieren meckert der Compiler immer bei enum LEDDIR Dir; und ich habe keine Ahnung warum. Hab schon in meine alten C-Bücher reingeschaut aber finde nicht woran es liegt. (Hab eigentlich nie was mit enum gemacht).
das Problem ist nicht der Enum, sondern, dass du varaiablen mitten im Code DEklarierst. Bei C müssen die Deklaraionen am Anfang des Blocks stehen. so sollte es also gehen:
1 | enum LEDDIR { LEFT2RIGHT, RIGHT2LEFT}; |
2 | enum BOOLIAN {FALSE, TRUE}; |
3 | int Switch_Count=0; |
4 | enum LEDDIR Dir; |
5 | enum BOOLIAN SwitchPressed; |
6 | LEDTris = 0; //PORT D output |
7 | SWTris = 1; // PORT B Pin 0 Input |
8 | ADBIT = 0b0111; // PORT B Digital |
9 | PULLUP =1; //Pullup aus |
10 | |
11 | Dir = LEFT2RIGHT; |
12 | SwitchPressed = FALSE; |
edit: außerdem heißt es boolEan
Felix S. schrieb: > aber beim > compilieren meckert der Compiler immer bei > > enum LEDDIR Dir; Die Fehlermeldung lautet "gemecker"? Du programmierst vermutlich in C. In C können Variablendeklarationen nur zu Beginn eines Blocks erfolgen, nicht mittendrin. Vor Deiner Deklaration von "Dir" aber steht Programmcode, beginnend mit der Zuweisung an "LEDTris".
>so sollte es also gehen: > > enum LEDDIR { LEFT2RIGHT, RIGHT2LEFT}; > enum BOOLIAN {FALSE, TRUE}; > int Switch_Count=0; > enum LEDDIR Dir; > enum BOOLIAN SwitchPressed; Oder typedef benutzen:
1 | typedef enum { LEFT2RIGHT, RIGHT2LEFT} LEDDIR; |
2 | typedef enum {FALSE, TRUE} BOOLEAN; |
3 | int Switch_Count=0; |
4 | LEDDIR Dir; |
5 | BOOLEAN SwitchPressed; |
Danke hat funktioniert. Hatte das vergessen, QT und so meckert halt net weil die c++ compiler benutzen... Und das MPLAB reinen C. '-.-
> das Problem ist nicht der Enum, sondern, dass du varaiablen mitten im > Code DEklarierst. Der GCC toleriert das im übrigen (Gibt nicht mal ein Warning) Als ich das erste mal mit MPLAP gearbeitet hab (C für den PIC18F4550) bin ich auch drauf reingefallen, hab geschlagene 30 Minuten nach dem Fehler gesucht....
> In C können Variablendeklarationen nur > zu Beginn eines Blocks erfolgen, nicht mittendrin. Bei C99 gilt das glücklicherweise nicht mehr, das hilft aber nichts, wenn man MPLAB benutzen muss.
bla schrieb: >> das Problem ist nicht der Enum, sondern, dass du varaiablen mitten im >> Code DEklarierst. > Der GCC toleriert das im übrigen (Gibt nicht mal ein Warning) Ist ja auch bereits seit über einer Dekade ganz normales C. Man kann GCC aber in einen Vorkriegsmodus schalten, in dem er solche Sachen auch anmeckert.
Rolf Magnus schrieb: > Ist ja auch bereits seit über einer Dekade ganz normales C. Das mag zwar sein, aber es gibt nach wie vor viele Compiler, die kein C99 unterstützen. Und dazu gehört eben auch der ansonsten vorzügliche Compiler aus Redmond.
Rufus Τ. Firefly schrieb: > Rolf Magnus schrieb: >> Ist ja auch bereits seit über einer Dekade ganz normales C. > > Das mag zwar sein, aber es gibt nach wie vor viele Compiler, die kein > C99 unterstützen. Und dazu gehört eben auch der ansonsten vorzügliche > Compiler aus Redmond. Auch der gcc kann nicht alle aspekte von c99, wenn ich mich nicht irre.
Vlad Tepesch schrieb: > Auch der gcc kann nicht alle aspekte von c99, wenn ich mich nicht irre. Er kann zumindest den überwiegenden Teil davon, manches schon länger, als es C99 offiziell gibt, während Microsoft es bis heute einfach komplett ignoriert.
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.