Я работаю над приложением, состоящим из нескольких модулей, которые построены как статические библиотеки.Это выглядит как
root
|__module1
| |__mod1.h
|
|__module2
| |__mod2.h
|
main.c
mod1.h
(защита заголовка опущена):
//returns 0 on success error code otherwise
int do_mod1();
mod2.h
(защита заголовка опущена):
//returns 0 on success error code otherwise
int do_mod2();
Я определилкоды ошибок прямо в заголовке библиотеки:
mod1.h
:
#define MOD1_ERROR 1
int do_mod1();
mod2.h
#define MOD2_ERROR 2 //1 can not be used otherwise it would introduce a conflict
int do_mod2();
Проблема в том, что между кодами ошибок могут возникать конфликтымодули, вводящие ненужные зависимости между собой.
Поэтому я решил ввести декларацию extern
, поместить код ошибки в отдельный заголовок в модулях и дать определение в приложении, которое использует эти модули.Примерно так:
mod1err.h
:
extern const int mod1_error;
mod2err.h
:
extern const int mod2_error;
application_error.h
:
#include mod1err.h
#include mod2err.h
const int mod1_error = 1;
const int mod2_error = 2;
IsХорошей практикой является использование extern
объявлений таким образом, или может быть лучший подход ??