Добрый день подскажите , как соединить две библиотеки .С .H
1) Первая библиотека содержит функции для работы с кольцевым буфером, buf.H файл соответственно содержит структуры для работы с ними.
2) Вторая библиотека Config.h, это запись системных настроек в ПЗУ. Она глобальная так как настройки могут меняться хоть где(в любом файле) по этому её header добавляю во все хедеры остальных библиотек (добавлю в app.h -> его содержат абсолютно все библиотеки )
Так вот мне понадобилось в Config.h добавить работу с буфером. Т.е некий тип который описан в buf.H после чего компилятор начал ругаться что мне может скомпилировать файл
buf.C
и указывает ошибку на Config.h на тип структуры говорит что неизвестна. После чего я начал разбираться почему он её выдает. Оказалось что при компиляции файла buf.с первоначально инклудиться header app.h (где находится Config.h а в самом файле) он вставляется в верхнюю часть файла buf.h а само описание типа находится в buf.h но ниже. По этому он и выдает ошибку.
Примерно так выглядит config.h и buf.h
Код: Выделить всё
#ifndef Config_H_
#define Config_H_
#include "Aplication.h" << тут содержиться Buf.h и др.
......
TstackLow Test; <<<<<!!!!!Ошибка!!!!!!!!
#endif
//==============
//==============
//==============
#ifndef Buf_H_
#define Buf_H_
#include "Aplication.h"
......
typedef struct {
unsigned short int Count;
unsigned short int Tail;
unsigned short int Head;
unsigned char Buf[SIZE_STACK_LOW][SIZE_NAME];
}TstackLow;
#endif
на выходе buf.c это все разворачивается в
Код: Выделить всё
TstackLow Test;
......
typedef struct {
unsigned short int Count;
unsigned short int Tail;
unsigned short int Head;
unsigned char Buf[SIZE_STACK_LOW][SIZE_NAME];
}TstackLow;
Естественно он не может понять. Как это сделать правильнее? Можно конечно перенести typedef struct {...}TstackLow; в Config.h и тогда проблема исчезнет, но не хочу плодить разные сущности в одном файле, если у них есть свой(buf.h)
Возможно это из моей неправильно концепции, где я создаю app.h и его инклужу ко все библиотекам, а внутрь его уже добавляю то что может использоваться во всех модулях (тип процессора(stm32f1,stm32f4,..), таймеры, светодиоды, и тд..)