Da Sie auf einem LCD angezeigt werden, gehe ich davon aus, dass es sich um ein eingebettetes System handelt.
Legen Sie die Daten nicht in eine Kopfzeile.
Legen Sie die Daten in eine normale C- oder C++ - Datei. Kompilieren Sie das. Es enthält möglicherweise nur die Daten, das ist in Ordnung, und macht es einfach zu aktualisieren.
Verwenden Sie dann die Header-Datei, um den Zugriff auf die Daten zu ermöglichen.
Zum Beispiel in einer images.c Datei:
#include "images.h"
const byte numbers1[MAX_NUMBERS1] = { ... };
byte numbers2[MAX_NUMBERS2]; // will be initialsied to 0
Die die images.h ist:
#ifndef _IMAGES_H_
#define _IMAGES_H_
typedef unsigned char byte;
#define MAX_NUMBERS1 (450)
// different constants in case you change something
#define MAX_NUMBERS2 (450)
// even better if you can do const static int MAX_NUMBERS1=450;
// but depends on the compiler
extern const byte numbers1[MAX_NUMBERS1] = { ... };
extern byte numbers2[MAX_NUMBERS2]; // will be initialised to 0
#endif
Dann werden alle anderen .c-Dateien in das Programm auf sie zugreifen können.
Es ist (fast) immer eine schlechte Idee, eine Definition ein Variable in eine Header-Datei zu setzen.
Eine Deklaration einer Variablen, z. sagt dem C-Compiler, dass es eine Arrayvariable namens numbers2
woanders im endgültigen, verknüpften Programm gibt. Wenn der Linker diese Definition (von woanders) nicht erhält, wird ein Fehler ausgelöst, da für die zugewiesene Variable kein Platz ist.
Eine Definition einer Variablen (notice no extern), z. byte numbers2[MAX_NUMBERS2];
teilt dem C-Compiler effektiv mit, dass es eine Arrayvariable namens numbers2
gibt, die den Speicherplatz hier im resultierenden Objektcode aus dieser Quelldatei zuweisen soll, und dies wird verwendet, um den Wert der Variablen im final zu halten , verknüpftes Programm.
Der Raum für numbers2
ist nicht durch den C-Compiler zugewiesen wird, wenn er eine Erklärung (vorangestellten extern
) sieht, zugeordnet wird, wenn sie die tatsächliche Definition sehen (keine extern
).
Wenn Sie also die tatsächliche Definition einer Variablen in eine Header-Datei einfügen und sie in mehr als eine Quellcodedatei (.c) einbinden, wird der C-Compiler mehr als einmal Speicherplatz für die Variable zuweisen. Dann gibt der Linker einen Fehler (in der Regel mehrere Definitionen mit demselben Namen).
Es gibt ein subtileres Problem. Wenn bei der ersten Entwicklung des Programms die Headerdatei nur eine Quelldatei enthält, wird das Programm korrekt kompiliert und verknüpft. Wenn zu einem späteren Zeitpunkt eine zweite Quellendatei den Header enthält (möglicherweise hat jemand gerade die ursprüngliche Quellcodedatei in zwei Dateien aufgeteilt), löst der Linker einen Fehler mit mehreren Definitionen aus. Dies kann sehr verwirrend sein, da das Programm zum Kompilieren und Verknüpfen verwendet wurde, und anscheinend hat sich nichts geändert.
Zusammenfassung
zuteilen niemals Platz für eine Variable durch eine Definition in einer Header-Datei setzen. Fügen Sie nur Variablendeklarationen in Header-Dateien ein.
Warum p nicht Hast du den Code, den du bisher hast und welche Compilerfehler du bekommst? –
Sie können so etwas nicht "definieren". Denk darüber nach; Jedes Mal, wenn Sie es verwenden, würden Sie ein neues Array deklarieren. Das wird natürlich zu mehreren Neudefinitionen führen. Makros sind einfach Textsubstitution. Ersetzen Sie den Text selbst und sehen Sie, ob es Sinn ergibt. –