typedef enum

#3871759
Lesenswert?

Hallo

Ich habe bei einem STM32F4 C-Programm ein Problem.
In einem header file a.h ist folgendes definiert:

typedef enum
{
IDLE, INIT, START, RUN, STOP, BRAKE, WAIT, FAULT
} SystStatus_t;

Danach habe ich ein 2. Header File b.h
Darin ist a.h über #include "a.h" eingbebunden.

In diesem header File habe ich den Enum als extern eingebunden:
extern volatile SystStatus_t State;

Der Compiler zeigt mir aber aber die Stelle mit extern und meldet:
Error[Pe020]: identifier "SystStatus_t" is undefined

Was mache ich da falsch?

Danke & Gruss
#3871823
Lesenswert?

holger schrieb:
> Du kannst ein enum nicht dazu verwenden eine Variable zu
> definieren.

Doch. Nur sollte man sie auch wirklich definieren, nicht nur 
deklarieren.

Klaus Wachtler schrieb:
> Was dann aber eine andere Meldung geben sollte...

Bei dem betreffenden Compiler scheint das genau dafür zu stehen.

Mach Fax schrieb:
> extern volatile SystStatus_t State;

Da fehlt in einem .c File noch:
volatile SystStatus_t State;
#3871855
Lesenswert?

Klaus Wachtler schrieb:
> Deshalb frug ich auch nach mehr Quelltext, evtl. steht hier ja nur die
> halbe Wahrheit.

Hallo

Es hat funktioniert. Der Fehler war, dass ich #include "a.h" einmal da 
gemacht habe wo ich es auch benötige und ein 2.Mal im global.h, das 
ebenfalls eingebunden wird. Demzufolge wurde #include "a.h" zweimal im 
gelichen File included und seit ich es im global.h entfernt habe ist 
auch der Fehler weg.

Gruss & Danke der schnellen Antworten, übrigens, ich der Compiler ist 
IAR Workbench für ARM V7.30.
#3872169
Lesenswert?

Mach Fax schrieb:
> Demzufolge wurde #include "a.h" zweimal im
> gelichen File included und seit ich es im global.h entfernt habe ist
> auch der Fehler weg.

Der richtige/übliche Weg wäre, "include guards" zu verwenden, so in der 
Art:
1
/* blabla.h was, wozu, weshalb, von wem, ... */
2

3
#ifndef _BLABLA_H_
4
#define _BLABLA_H_
5

6
/* ... alles, was du in der blabla.h haben willst ... */
7

8
typedef ...
9

10
extern ...
11

12

13
#endif

Dann kannst du so oft includen wie du willst, ohne daß sich jemand daran 
stört.
Nur Definition von Variablen und Funktionen (also ohne extern...) gehen 
so nicht, zumindest nicht wenn man mehrere C-Dateien hat und getrennt 
übersetzt. Aber sowas gehört ja auch nicht in eine Headerdatei (außer 
inline-Funktionen, die gehören dahin und funktionieren auch).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren