在C ++中共享库主头文件的最佳实践是什么?

时间:2009-03-19 19:14:44

标签: c++ header shared-libraries

当我创建共享库时,我在库源的根目录中有一个头文件(但没有文件扩展名),名称与库相同。

例如,如果我的库名为libirock.so,那么我在项目根目录中有一个名为irock的文件。该文件将包含库中所有最重要的头文件,因此在实现库时,您只需使用此包含行:

#include <irock> // Instead of <irock.h>

当我看到编译器警告类似于:

时,我就明白了
#include <string.h> is obsolete, use #include <string> instead

两个问题:

  1. 使用irock而不是irock.h最佳实践?
  2. 使用单个头文件而不是多个头文件是否正确?
  3. 行动方案

    感谢您的回答!从答案中,我已经决定:

    1. 将使用<irock.h>代替<irock>
    2. 我将继续使用'主'头文件。

5 个答案:

答案 0 :(得分:6)

一句话,没有。你想要明确地使用irock.h

扩展到位后,很明显这是一个头文件,任何使用基于文件扩展名的文件的应用程序都会正确地知道如何解释头文件。

答案 1 :(得分:4)

不,&lt; header&gt;而不是&lt; header.h&gt; idiom应该只用于标准库(和标准模板库)头文件。

答案 2 :(得分:4)

标准中没有任何关于文件名扩展的“允许”,“禁止”或“最佳做法”。

使用您喜欢的任何形式。在某些平台上,为注册类型设置文件扩展名是一个便利因素。

它的价值<string.h><string>是完全不同的标题。相当于<string.h>的C ++命名空间实际上是<cstring>

答案 3 :(得分:0)

#include只是将给定文件名的内容放入实际文件中。所以,如果你没有文件扩展感觉更好,那就去做吧。

当然,文件扩展名具有语义含义,这是有用的。此外,没有扩展名的包含文件在大多数用户心中与标准库相关联。

答案 4 :(得分:0)

Qt4中使用的是,您可以按“类名”包含文件名,例如

#include <QString>
#include <QWidget>
#include <QPainter>
#include <QApplication>
#include <QCoreApplication>

这些包括虚拟包含,其中包括正确的标题。在现实生活中,您将看到在单个include.h中定义了几个类,并且您将该文件包含两次。

再次使用没有“.h”的版本的原因是你会想要使用包含camelCase(或PascalNotation)和 if if 将代码从windows移动到unix(linux或mac)你通常会遇到问题。不难做到 - 但你需要注意正确地做到这一点。