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
in einer C Datei muss da Array auch angelegt werden, das sehe ich bei dir nicht.
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];
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.
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;
}
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 };
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.