Array in h Datei

Gast #4646749
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
Moderator
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.
Gast
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;
}
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.
Moderator
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 :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.