Forum: PC-Programmierung enum Problem


von No Y. (noy)


Lesenswert?

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).

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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".

von Meister E. (edson)


Lesenswert?

>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;

von No Y. (noy)


Lesenswert?

Danke hat funktioniert.

Hatte das vergessen, QT und so meckert halt net weil die c++ compiler 
benutzen...

Und das MPLAB reinen C.

'-.-

von bla (Gast)


Lesenswert?

> 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....

von Tom (Gast)


Lesenswert?

> 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.

von Rolf Magnus (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.