Forum: Mikrocontroller und Digitale Elektronik Array in h Datei


von Include (Gast)


Lesenswert?

Hallo,

ich dachte eigentlich das folgende Funktioniert:


test.h:
#define TEST 5
extern uint8_t array[];

======================

test.c:

array[0] = TEST;
array[1] = 9;

======================

nutzen.h

void fuk(void);

======================

nutzen.c

#include "test.h"
#include "nutzen.h"

void fuk(void){
if(array[0] == 5)
usw...
}

======================
main.c
#include "test.h"
#include "nutzen.h"
int main(void) {

fuk();

return 0;
}


Tuts aber nicht. Wo ist mein Fehler? Ich will im Grunde das Array sowohl 
in der test.c, der nutzen.c und main.c verändern/ausgeben können.


Ich bekomme folgende Meldungen:

test.c warning: data definition has no type or storage class
test.c warning: type defaults to 'int' in declaration of 'array' 
[-Wimplicit-int]|
test.c conflicting types for 'array'
test.h note: previous declaration of 'array' was here
test.h error: invalid initializer

von Peter II (Gast)


Lesenswert?

in einer C Datei muss da Array auch angelegt werden, das sehe ich bei 
dir nicht.

von Chris (Gast)


Lesenswert?

Irgendwo solltest du das Array auch anlegen.
Und die Größe muss auch angegeben werden.

in *.C

uint8_t Array[5];

in *.H

extern uint8_t Array[5];

von Yalu X. (yalu) (Moderator)


Lesenswert?

In test.c wolltest du wahrscheinlich schreiben:

1
#include "test.h"
2
3
uint8_t array[] = { TEST, 9 };


Bei dir fehlt die Definition von array. Außerdem sind auf Top-Level
(also außerhalb von Funktionen) zwar Initialisierungen, aber keine
Zuweisungen wie

1
array[0] = TEST;

zulässig.

von Include (Gast)


Lesenswert?

Wenn ich dich richtig verstehe, so:
(Funktioniert bei mir aber auch nicht)

test.h:
#define TEST 5
extern uint8_t array[1];

======================

test.c:
uint8_t array[1];
array[0] = TEST;
array[1] = 9;

======================

nutzen.h

void fuk(void);

======================

nutzen.c

#include "test.h"
#include "nutzen.h"

void fuk(void){
if(array[0] == 5)
usw...
}

======================
main.c
#include "test.h"
#include "nutzen.h"
int main(void) {

fuk();

return 0;
}

von Peter II (Gast)


Lesenswert?

Include schrieb:
> (Funktioniert bei mir aber auch nicht)

gibt es auch eine Fehlermeldung?

von Include (Gast)


Lesenswert?

Identische Fehlermeldung.

Nu gehts aber, es lag am array

Yalu X. schrieb:
> In test.c wolltest du wahrscheinlich schreiben:
>
> #include "test.h"
>
> uint8_t array[] = { TEST, 9 };

von Steffen R. (steffen_rose)


Lesenswert?

test.c muss den Typ des Arrays auch kennen.
Inkludiere auch hier test.h, dann passt es zumindest mit den Typ 
schonmal.

Dass das Array auch noch irgendwo angelegt werden muss,wirst du dann 
beim Linken merken.

uint8_t ist dem Compiler auch nicht ohne zusätzliches Inklude bekannt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Include schrieb:
> uint8_t array[1];

Die Größe 1 ist zu klein, wenn du 2 Elemente nutzen möchtest.

> array[0] = TEST;
> array[1] = 9;

Das sind Top-Level-Zuweisungen (s. mein letzter Beitrag).

Mindestens in test.h musst du natürlich auch noch stdint.h inkludieren,
damit du uint8_t verwenden kannst.

Edit:

Ok, du hast es inzwischen ja hinbekommen :)

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.