【问题标题】:header files in C++C++ 中的头文件
【发布时间】:2011-08-06 02:53:27
【问题描述】:

在我的 C++ 代码中,我想在一个文件夹中包含许多头文件。我怎样才能一次将它们全部包含在内?

【问题讨论】:

  • @ildjarn:这很可能是一个答案。
  • 十分之九,您不需要在每个文件中包含所有这些标题。认真重新考虑这是否真的有必要冒着增加复杂性的风险。
  • 没有办法在代码中包含包含头文件的整个目录吗?
  • 您可以在 Makefile 中自动创建便利标头,请参阅@edgar.holleis 对此的回答(但使用更好的包含保护)

标签: c++ file header


【解决方案1】:

创建一个包含所有内容的头文件,然后将其包含在内。

也就是说,我知道没有内置此功能的编译器,如果有的话,那肯定是非标准功能。

【讨论】:

  • 因为命名是关键:那些“大”的标头通常被称为方便标头。例如,您可能会在 Boost 库中看到它们,其中通常有一个 optional.hpp 文件将位于 optional 文件夹旁边并包含(大部分)其内容。
【解决方案2】:

在保存 .h 文件的目录中执行以下 shell 命令:

rm -f meta.h
echo "#ifndef META_H" >> meta.h
echo "#define META_H" >> meta.h
for h in `ls *.h`; do echo "#include \"$h\"" >> meta.h; done
echo "#endif /*META_H*/" >> meta.h

...然后单独使用#include "meta.h"。

【讨论】:

  • 不推荐您的包含防护:C++0x 草案标准§17.6.3.3.2 说Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace. 防护不应以_ 开头或包含两个_s。跨度>
  • @Mat : 具体来说,两个连续 _s.
  • @ildjarn:确实,这并不清楚。标准引用是:Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.12) is reserved to the implementation for any use.
  • 所以只要删除第一个下划线,这是一个很好的 bash 解决方案?为什么不编辑解决方案来解决这个问题?
【解决方案3】:

您可以将它们包装在一个帮助头文件中。创建一次后,您可以在任何地方include它。

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2016-06-15
    • 2017-11-20
    相关资源
    最近更新 更多