Forum: Mikrocontroller und Digitale Elektronik extern struct ind Funktionen anlegen


von achim (Gast)


Lesenswert?

Hallo,

wenn ich eine Variabel global verwenden will, wird sie zuerst in der 
main.c definiert:

uint8_t update=0;

Wenn ich diese in einem anderen c-File verändern will muss ich sie mit

extern uint8_t update;

einbinden. Das funktioniert auch wie gewünscht.

Wie kann ich dieses nun bei dem Datyntyp struct machen ?

Als Beispiel habe ich in main.c eine Struktur angelegt:

struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
}time;


Grüße

von Tom (Gast)


Lesenswert?

Hallo Achim,

Du definierst

uint8_t update=0;

in Deiner main.c

Danach erstellst Du ein header file main.h in dieses schreibst Du

extern uint8_t update;

Nun erstellst Du ein neues C-File zB. Neues_File.c

in dieses includest Du das main.h

include <main.h>


....
Code
...

Damit ist dem Neues_File.c bekannt das update schon definiert ist und Du 
kannst es benutzen.

Das wars

Tom

von dummy (Gast)


Lesenswert?

Ich mach das immer so:

In einer main.h

struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
};

extern struct clock time;

In main.c

struct clock time;

In deiner *.c
#include "main.h"

von achim (Gast)


Lesenswert?

Es geht mir eben und den Datentyp struct.

Das Beispiel war:

struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
}time;


Leider kann ich in einem anderen c-File nicht einfach

extern struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
}time;

schreiben.

von achim (Gast)


Lesenswert?

Ich habe die Deklarationen immer ohne .h Files gemacht.

Also ganz einfach:


In der main.c :

uint8_t update=0;

Und im anderen c-File:

extern uint8_t update;


Gibts es da kein Äquivalent für structs ?

von holger (Gast)


Lesenswert?

>Gibts es da kein Äquivalent für structs ?

Nein, deine *.c Datei weiss ohne Headerdatei
ja nicht wie das struct aussieht.

von Lupuz (Gast)


Lesenswert?

typedef? und dann über extern drauf zu greifen?

von Jörg G. (joergderxte)


Lesenswert?

main.h:
1
//struct bechreiben
2
struct  clock{
3
  uint8_t hr;
4
  uint8_t min;
5
  uint8_t sec;
6
};
7
/* wahlweise mit typedef das 'struct' loswerden:
8
typedef struct clock clock_t;
9
*/
10
// Die externe Variable vom Typ "struct clock" deklarieren
11
extern struct clock the_real_clock;
main.c:
1
#include "main.h"
2
/* Die Variable "the_real_clock" definieren (d.h. GENAU EINMAL initialisieren): */
3
struct clock the_real_clock = {0,30,3};
extra.c:
1
#include "main.h"
2
//...
So steht's zumindest im Buch ;)
hth, Jörg

von C-Buch (Gast)


Lesenswert?

Schon mal in einem C-Buch oder C-Tutorial geschaut?

Gott gib uns mehr Verstand.

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.