c++ - 是否建议使用 extern 来避免 header 依赖?

标签 c++ coding-style include extern

我已经使用 extern 消除了翻译单元中的两个 header 包含。这可取吗?

我的具体情况:我有一个名为 ParseTree 的类,它累积了 Token*ParseTree*Parser 的私有(private)成员。

最初,我在 parse_tree.cc 中有以下行。

#include "parser.h"
#include "token.h"

在分析我的代码后,我隔离了两个实际上具有外部依赖项的函数,并将包含替换为以下内容:

extern std::ostream& operator<<(std::ostream& out, const Token& t); // @token.h
extern bool hasPriority(const Token* p_tok1, Token* p_tok2); // @parser.h

这两种解决方案似乎都有效。在选择 extern 而不是 include 时,有什么隐患需要注意吗?

最佳答案

如果您使用 extern 声明,则在您使用它的任何地方都重新声明函数的原型(prototype),从而不必要地重复自己。有了头文件,如果要改原型(prototype),只需要改一个地方就可以了。

所以不,当你已经有了合适的头文件时,不要使用 extern

关于c++ - 是否建议使用 extern 来避免 header 依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7021016/

相关文章:

c# - 使用 WER(Windows 错误报告)工具收集我们程序的小型转储

ruby-on-rails - 如何让这个 ruby​​ 方法不那么难看(嵌套)

ruby-on-rails - 轮胎 : Eager loading associations from multiple models

c++ - #include 头文件已经包含在包含的头文件中是常见的做法吗?

c++ - Qt 双缓冲行为

c++ - 使用libpthread在共享库中有未定义的行为,但在ELF中没有依赖关系

c++ - 使用 GDI+ 打印无效

c++ - 有哪些技巧可以使具有大量计算的函数变得干净?

c - 在不使用宏的情况下简化和减少代码量

php - 关于在 PHP 中包含 html 页面的问题