制作一个通用的标头文件以实现解析树
Making one common header file for parse tree implementation
我正在用野牛做一棵解析树。目前,我有一个针对每个非终端的课程,每个生产都有一个子类。问题是我每个班级都有一个标题,所以它们很多。我认为的解决方案是制作一个包括所有标题的通用标头。
当前项目结构的示例:
-ast
--program.hh
--decl.hh
--..
--..
--..
--constants.hh
公共标头(例如common_header.hh
(看起来像:
#ifndef COMMON_HEADER_HH
#define COMMON_HEADER_HH
#include "program.hh"
#include "decl.hh"
// a lot of includes here
#include "constants.hh"
#endif //COMMON_HEADER_HH
因此,在野牛我只包括#include "common_header.hh"
,问题是我读到这被认为是不良练习,因为它可以产生开销和增量汇编时间。这种情况是合理的吗?解析器将始终使用所有标题。
在C (和C(中,最好将每个翻译单元的大小最小化在合理程度上。创建一个包括许多其他包含许多其他标题的文件通常是一种糟糕的做法。
但是,您似乎正在描述一个包括任何包含此组标头的翻译单元,都需要包括整个标题。在这种情况下,是否直接通过单个怪物标头直接将它们包括在内。
仍然,只有在许多翻译单元中使用它,才能创建怪物标头。如果仅包含在一个翻译单元中,则没有明确的优势,而包括所有标题。
另一个潜在的怪物标头的优势是,鉴于您已经在构建系统中某处已有野牛语法文件列表,因此您可以在构建时间生成它。但这是一个很小的便利性,因为添加新的语法文件在添加使用代码之前没有用。
相关文章:
- 在实现文件中使用头文件的通用 lambda
- 在文件上实现迭代器
- C++头文件和类实现出现问题
- 在文件夹迭代上实现 RAII
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 用于 Windows 写入临时文件的 mkstemp() 实现
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 在 *.cpp 文件中实现的 c++ 函数/方法永远不会内联扩展吗?
- 在实现文件中使用模板参数声明方法
- 在头文件中使用opencv类型来实现未定义的标识符
- 模板实现文件中的匿名命名空间
- 创建单独的实现文件和头文件
- 多文件类实现Cpp
- Reader类实现中的文件读取错误
- MEX文件实现特征库伪内函数崩溃
- openssl rc4 命令行加密和 cpp 文件实现 rc4 之间的区别
- 从其他头文件实现结构
- c++头文件-实现-头文件-实现依赖链
- 内存映射文件实现