虽然我不是一个有经验的 C 程序员,但我必须在工作中使用这种语言来构建一个在 SunOS 和 Win32 上都可以编译的静态库。这个库只有几个源文件和它们对应的头文件(比如说:a.c
、、b.c
和)。该项目在两个平台上编译并生成库。a.h
b.h
mylib.a
我的问题是如何将实现的功能公开mylib.a
给其他项目,因为当我同时添加两者时a.h
,b.h
我会遇到一些宏重新定义错误。
编辑:我发现宏重新定义错误是因为编译命令中的宏定义(与我的头文件无关)并且它已解决:) 但我仍然想就组织我的源文件和头文件提出建议。
我的疑问是我是否修改a.h
并b.h
在外部使用,或者我是否应该专门创建一个头文件来声明这个库的接口(比方说mylib.h
)。我不想使原始头文件过于复杂,但我不想让不同的头文件保持同步......我想听听更有经验的 C 程序员关于他们的模式、每种方法的优点以及是否有其他方法选项。
先感谢您。
编辑:似乎我没有提供足够的信息;下面的模式试图显示我的文件是如何组织的:每个代码文件只包含它的头,每个头都有一个保护条件,每个头都包括一个公共头,这个公共头包括所有头。
// a.c ----
#include "a.h"
// b.c ----
#include "b.h"
// a.h ----
#ifndef GUARD_A_H
#define GUARD_A_H
# include "liball.h"
void function_prototypes_implemented_in_a();
#endif // GUARD_A_H
// b.h ----
#ifndef GUARD_B_H
#define GUARD_B_H
# include "liball.h"
void function_prototypes_implemented_in_b();
#endif // GUARD_B_H
// liball.h ----
#ifndef GUARD_LIBALL_H
#define GUARD_LIBALL_H
# include <time.h> // standard headers
# include <stdioa.h>
# include "a.h" // all headers in this project
# include "b.h"
#endif // GUARD_LIBALL_H