Поскольку вы отображаете на ЖК-дисплее, я предполагаю, что это встроенная система.
Не помещайте данные в заголовок.
Поместите данные в обычный C илиC ++ файл.Скомпилируйте это.Он может содержать только данные, что нормально, и его легко обновлять.
Затем используйте файл заголовка, чтобы предоставить доступ к данным.
Например, в images.cfile:
#include "images.h"
const byte numbers1[MAX_NUMBERS1] = { ... };
byte numbers2[MAX_NUMBERS2]; // will be initialsied to 0
Тогда images.h - это:
#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
Тогда все остальные файлы .c в программе могут получить к ним доступ.
Это (почти)всегда плохая идея поместить определение переменной в файл заголовка.
A объявление переменной, например.extern byte numbers2[MAX_NUMBERS2];
сообщает компилятору C, что в окончательной связанной программе есть переменная-массив с именем numbers2
где-то еще .Если компоновщик не получит это определение (откуда-то еще), он выдаст ошибку, потому что нет места для выделенной переменной.
A определение переменной (уведомление №extern), например.byte numbers2[MAX_NUMBERS2];
фактически сообщает компилятору C, что существует переменная массива с именем numbers2
, и она должна выделять место здесь, в результирующем объектном коде из этого исходного файла, и это будет использоваться для хранения значения переменной впоследняя связанная программа.
Пространство для numbers2
равно , а не , выделенному компилятором C, когда он видит объявление (которому предшествует extern
), оно выделяется, когда оно видитфактическое определение (нет extern
).
Итак, если вы поместите фактическое определение любой переменной в файл заголовка и включите его в несколько файлов исходного кода (.c), компилятор Cвыделит место для переменной более одного раза.Тогда компоновщик выдаст ошибку (обычно несколько определений с одним и тем же именем).
Есть более тонкая проблема.Если при первой разработке программы заголовочный файл включает только один исходный файл, то программа будет правильно скомпилирована и скомпонована.Затем, позже, если второй исходный файл содержит заголовок (возможно, кто-то только что разделил исходный файл исходного кода на два файла), компоновщик выдаст ошибку «множественные определения».Это может быть очень запутанным, потому что программа использовалась для компиляции и компоновки, и, очевидно, ничего не изменилось.
Сводка
Никогда не выделяйте место для переменной , помещая определение в заголовочном файле.Только переменные декларации помещаются только в заголовочные файлы.