typedef enum

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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.