如果库使用它们,应该在哪里声明库#defines?

时间:2011-04-28 11:13:21

标签: c c-preprocessor

这似乎是一个相当愚蠢的问题,但我有一个我正在编写的库的头文件,我在声明一些字符串常量:

#define CONST1 "Hello, World!"
#define CONST2 "Foo Bar"
// etc

库的源代码使用了这些常量,因此我需要在源代码中包含头文件:

#include <header.h>
void func() {
    printf("%s\n", CONST1);
}

这导致最终用户不需要在使用库编写的任何源中包含头文件。这是最佳做法还是有替代方案?

1 个答案:

答案 0 :(得分:3)

是的,这是传统方法。我建议(为了清楚起见),为预处理器符号添加前缀,使其不太可能与用户应用程序代码或其他库发生冲突。

我不明白您的用户代码需要包含您的标头的含义,但是......由于这些是预处理程序符号,如果符号是必需的,则需要带有定义的标头对用户程序感兴趣。

如果字符串只是在你的库实现中使用 ,那么你可以将它们移动到私有标题以减少混淆。