Оставив точное определение клиенту библиотеки - PullRequest
0 голосов
/ 30 января 2019

Я работаю над приложением, состоящим из нескольких модулей, которые построены как статические библиотеки.Это выглядит как

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 объявлений таким образом, или может быть лучший подход ??

...