(原文链接:https://abseil.io/tips/103 译者:clangpp@gmail.com)
每周贴士 #103: Flag是全局变量
- 作者:Matt Armstrong
- 短链接:abseil.io/tips/103
在.cc
文件的全局作用域定义flag。在相应的.h
文件里声明之(最多一次)。
为什么要在头文件中声明东西?
对我们大部分人来说,使用头文件是本能反应,所以我们也许忘记了它们为什么被使用:
- 在头文件中声明东西,可以使其很容易被其他地方
#include
。整个程序看到的都是同样的声明。 - 在定义了相同实体的
.cc
中包含该头文件,确保了定义与声明相匹配。 - 头文件可以作为程序包的公开API。除了程序包的公开API,使用其他任何东西都容易出锅。
- 包含头文件,而不是重新声明实体,既方便工具又方便人来进行依赖分析。
Abseil Flags和其他任何全局变量一样脆弱
你可以在没有链接错误的情况下把这货搞砸。首先,在一个.cc
文件中放进如下代码: