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

问题描述:

这似乎是一个相当愚蠢的问题,但我对我写在我声明了一些字符串常量库中的头文件:如果库使用它们,应该在哪里声明库#defines?

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

库的源利用这些常数,因此我需要包括源代码中的头文件:

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

这导致最终用户不需要为包括他们使用的库编写任何源的头文件。这是最佳做法还是有其他选择?

是的,这是传统的方法。为了清楚起见,我会建议你在预处理器符号前面添加一些内容,使它们不太可能与用户应用程序代码或其他库相冲突。

我不看你怎么个意思与用户代码需要包括你的头,虽然...因为这些都是预处理器符号,则需要与定义的头,如果符号是用户感兴趣的程序。

如果这些字符串只用于里面的您的库实现,那么您可以将它们移动到私有头部以减少混淆。

+0

谢谢。这些字符串主要用于图书馆,尽管它们也可以在外部使用。我会考虑为他们使用一个单独的标题。 – BWHazel 2011-05-03 15:59:59