将确切的定义留给库客户端

时间:2019-01-30 08:03:56

标签: c declaration extern

我正在开发一个由多个模块组成的应用程序,这些模块被构建为静态库。看起来像

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;

以这种方式使用extern声明是一种好习惯,否则可能会有更好的方法?

0 个答案:

没有答案