Forum: Mikrocontroller und Digitale Elektronik definitionen


von Mike (Gast)


Lesenswert?

Servus

Wie kriegt man es hin in 2 h-files

enum BOOLEAN {false,true};

zu definieren ohne, dass es redefined ist?

Ich möchte nämlich zB 2 files
einmal xxx.c und xxx.h erstellen und beide sollen in sämtlichen 
Projekten verwendet werden können, ohne etwas hinzuzufügen oder etwas zu 
löschen.

Das heisst zB:
Ich habe ein Projekt
xxx.c und xxx.h
yyy.c und yyy.h

Jetzt möchte ich einfach yyy löschen können, ohne dass mir xxx wegen 
fehlendem boolean jammert.

Geht das irgendwie?

von M.A. S. (mse2)


Lesenswert?

- Du definierst soetwas z.B. in einem dritten File, das von den beiden 
ersten includiert wird

- oder Du schützt die Definition mit einem #ifdef-Wächter.

von Peter D. (peda)


Lesenswert?

Was stört Dich an:
1
#include <stdbool.h>

von Mike (Gast)


Lesenswert?

Peter D. schrieb:
> Was stört Dich an:#include <stdbool.h>

gar nichts, das nehme ich jetzt.

M.A. S. schrieb:
> - Du definierst soetwas z.B. in einem dritten File, das von den
> beiden
> ersten includiert wird
>
> - oder Du schützt die Definition mit einem #ifdef-Wächter.

bei #ifndef muss ich aber immer irgend eine Konstante definieren oder?
oder geht das auch so:

#ifndef BOOLEAN
enum BOOLEAN {false, true};
#endif

von M.A. S. (mse2)


Lesenswert?

Mike schrieb:
> bei #ifndef muss ich aber immer irgend eine Konstante definieren oder?
Ja.

Mike schrieb:
> oder geht das auch so:
Nein.

Mike schrieb:
> Peter D. schrieb:
>> Was stört Dich an:#include <stdbool.h>
>
> gar nichts, das nehme ich jetzt.
Das ist sicherlich das beste.

von Thomas E. (thomase)


Lesenswert?

Mike schrieb:
> bei #ifndef muss ich aber immer irgend eine Konstante definieren oder?
> oder geht das auch so:

Angenommen du hast eine blabla.h, die du mehrfach einbinden möchtest. 
Damit die Definitionen darin nicht mehrfach gelesen werden und zu 
Redefines führen, machst du folgendes:
1
#ifndef BLABLA_H
2
#define BLABLA_H
3
4
//Der ganze Krempel, der da rein soll
5
6
#endif

Jetzt wird der Inhalt der Datei nur dann überhaupt gelesen, wenn 
BLABLA_H im entsprechenden Kontext nicht definiert ist. Da das bei der 
ersten gelesenen Datei aber passiert, werden die Inhalte bei den 
folgenden ignoriert.

von Mike (Gast)


Lesenswert?

Thomas E. schrieb:
> Mike schrieb:
>> bei #ifndef muss ich aber immer irgend eine Konstante definieren oder?
>> oder geht das auch so:
>
> Angenommen du hast eine blabla.h, die du mehrfach einbinden möchtest.
> Damit die Definitionen darin nicht mehrfach gelesen werden und zu
> Redefines führen, machst du folgendes:
> #ifndef BLABLA_H
> #define BLABLA_H
>
> //Der ganze Krempel, der da rein soll
>
> #endif
>
> Jetzt wird der Inhalt der Datei nur dann überhaupt gelesen, wenn
> BLABLA_H im entsprechenden Kontext nicht definiert ist. Da das bei der
> ersten gelesenen Datei aber passiert, werden die Inhalte bei den
> folgenden ignoriert.

danke dir vielmals

und auch den anderen

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Es ist in vielen Fällen ohnehin eine sehr schlechte Idee, Variable in 
Headerdateien zu deklarieren. In Header gehören nur die entsprechenden 
Tapdefinitionen und ggf. externals für Variable und Funktionen. Ebenso 
suggeriert der Bezeichner BOOLEAN, dass es sich um einen Typ oder ein 
Makro handele und nicht um eine Variable.

Besser wäre wohl eher:
1
// header.h
2
3
typedef enum {
4
  false, true
5
} BOOLEAN;
6
7
// Ggf.
8
extern BOOLEAN mein_wichtiges_globales_flag;

und
1
// code.c
2
#include "header.h"
3
4
BOOLEAN mein_wichtiges_globales_flag;

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.