Forum: Compiler & IDEs Externe Variable (Struct Array)


von Sepp (Gast)


Lesenswert?

Hallo zusammen,

zu dem Thema extern gibt es ja schon massig Einträge, aber leider bin 
ich immer noch am Rätselraten ud hab noch keine gültige Kombination 
"herausgefunden" :)
Hier mein Problem:

Ich habe eine Headerdatei in der ich ein Struct definiere:
1
//structdef.h
2
#ifndef _bla
3
#define _bla
4
typedef struct{
5
  uint16_t     tagnummer;                             
6
  uint16_t     a; 
7
  uint8_t      v;                                 
8
  BYTE         c;                           
9
  BYTE         d;
10
  BYTE         e;                            
11
  BYTE         *f;       
12
};

Dieses Struct will ich in einer Funktion anlegen und zwar so, dass ich 
nach Beendigen der Funktion wieder darauf zugreifen kann. Diese Funktion 
liegt zum Beispiel in Funktion.c

Im HauptProg mache ich einen include auf Funktion.h welche die Funktion 
(Createstruct()) beinhaltet und bereits die structdef.h includiert hat.

Ich führe als erstes Createstruct() aus und danch will ich auf die Var 
zugreiffen können.
Das Problem ist noch, dass es sich dabei um ein Struct-Array handelt 
dessen Größe erst in dieser Createstruct() ermittelt wird.

Wie (static, extern .... ??) muss ich die Var definieren und wo?
Hab echt den Überblick verloren.

von OliverSo (Gast)


Lesenswert?

Das Problem ist noch, dass es sich dabei um ein Struct-Array handelt
dessen Größe erst in dieser Createstruct() ermittelt wird.

von Karl H. (kbuchegg)


Lesenswert?

Sepp wrote:
> Hallo zusammen,
>
> zu dem Thema extern gibt es ja schon massig Einträge, aber leider bin
> ich immer noch am Rätselraten ud hab noch keine gültige Kombination
> "herausgefunden" :)
> Hier mein Problem:
>
> Ich habe eine Headerdatei in der ich ein Struct definiere:
>
1
> //structdef.h
2
> #ifndef _bla
3
> #define _bla
4
> typedef struct{
5
>   uint16_t     tagnummer;
6
>   uint16_t     a;
7
>   uint8_t      v;
8
>   BYTE         c;
9
>   BYTE         d;
10
>   BYTE         e;
11
>   BYTE         *f;
12
> };
>
> Dieses Struct will ich in einer Funktion anlegen und zwar so, dass ich
> nach Beendigen der Funktion wieder darauf zugreifen kann. Diese Funktion
> liegt zum Beispiel in Funktion.c

Dann gib der struct als erstes mal einen Namen, damit man sich
auch darauf beziehen kann.
Immer diese anonymen structs. Ich verstehe gar nicht, was daran so
schön sein soll.

Beachte auch:
Bis jetzt hast du nur die Dekleration einer Struct. Also den
Bauplan wie eine struct Variable aussehen wird. Du hast
noch keine Variable.

>
> Im HauptProg mache ich einen include auf Funktion.h welche die Funktion
> (Createstruct()) beinhaltet und bereits die structdef.h includiert hat.
>
> Ich führe als erstes Createstruct() aus und danch will ich auf die Var
> zugreiffen können.
> Das Problem ist noch, dass es sich dabei um ein Struct-Array handelt
> dessen Größe erst in dieser Createstruct() ermittelt wird.
>
> Wie (static, extern .... ??) muss ich die Var definieren und wo?
> Hab echt den Überblick verloren.

Ob Array oder nicht macht nur insofern einen Unterschied, als
die globale Variable dann ein Pointer sein muss

structdef.h
***********
1
typedef struct _myStruct
2
{
3
  ...
4
} myStruct;

function.h
**********
1
#include "structdef.h"
2
3
void CreateStruct( int Size );
4
5
extern myStruct* theArray;

function.c
**********
1
#include "function.h"
2
3
myStruct* theArray;
4
5
void CreateStruct( int Size )
6
{
7
  theArray = malloc( Size * sizeof( myStruct ) );
8
}

main.c
******
1
#include "function.h"
2
3
int main()
4
{
5
   CreateStruct( 5 );
6
7
   for( i = 0; i < 5; ++i )
8
     theArray[i].xxxyyy = ....
9
}

von Sepp (Gast)


Lesenswert?

1
Dann gib der struct als erstes mal einen Namen, damit man sich
2
auch darauf beziehen kann.
3
Immer diese anonymen structs. Ich verstehe gar nicht, was daran so
4
schön sein soll.

Sry. Hab ich vergessen. Mach ich natürlich normalerweise schon schöner 
:-)


@ Karl heinz Buchegger
Danke. Genau so funktionierts anscheinend tadellos. Danke!

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.