我已经使用 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/