Цитата(Serega Doc @ Oct 20 2005, 16:00)
Есть main.c и proc.c
в const.h объявляю константы и дефайны
Что понимается под "константами" в const.h? Если собственно объявление и инициализация констант, типа
Код
// in "const.h":
const int SomeConst=0x55AA;
то конечно линкер будет ругаться, т.к. при сборке окажется что SomeConst определена во всех файлах, куда включен const.h.
Более правильно
объявить константу в хедере:
Код
// in "const.h":
extern const int SomeConst;
а
определить и инициализировать ее в одном из *.C-файлов:
Код
// in "proc.c":
const int SomeConst=0x55AA;
Тогда компилятор при компиляции всех файлов, куда включен const.h, будет знать, что SomeConst где-то определено, будет знать его тип, а собственно память под SomeConst выделит только в proc.c. А линкер уже потом разберется что к чему, и ссылки на SomeConst из всех объектников привяжет к единому месту.
Вообще, есть такое общее правило: в заголовочных файлах *.h помещать только
объявления, т.е. то, что не порождает код и не вызывает выделения памяти.