Цитата(Mokena @ Oct 2 2007, 23:16)

Про массивы уже сказали. Компилятор должен знать, где этот массив размещать. Когда вы включаете в заголовочный файл
определение а не
объявление массива - компилятор вынужден создать по копии массива в каждом из файлов. Если вас это не смущает - добавьте static перед определением массива. Тогда каждая копия массива будет видна только внутри этого .c файла. Но это некрасивое решение. Правильнее
объявить массив в .h как extern, а
определить его в одном из .с:
Код
array.h:
extern uint8_t array[size];
file1.c:
#include "array.h"
uint8_t array[size] =
{
.....
.....
};
file2.c:
#include "array.h"
А вот для обычных констант как раз наоборот - можно определять их в .h как static uint8_t const Const1 = 123;, тогда компилятор вполне может не выделять под нее память и скомпилировать в опкод сразу значение константы, вместо ее чтения. Но при таком подходе нельзя брать адрес этой константы - иначе компилятор будет вынужден выделить под нее память.