限制标头中变量的范围
restricting scope of variables in headers
我有一个由组成的多文件程序
main.cpp
ext1.cpp
ext2.cpp
ext3.cpp
vars.h
顾名思义,main.cpp是主文件,extX.cpp包含各种函数和vars.h一些全局常量。
然而,在main.cpp中也有(一些!)变量声明,但它们必须只在main.cp的范围内——这就是为什么我没有将它们放在vars.h 中
我想减少main.cpp中的代码量(为了清晰起见)。我正在寻找一种方法,在某种类型的头中声明这些变量,但它只对main.cpp.可见
如果我把它们都放在vars_main.h(带有no外部关键字)里面,只包括"vars_main.h.",那么我就实现了目标,这一点正确吗?
这样做被认为是"正确的"C++风格吗?
如果这些变量仅在main()
中使用,那么是的,可以这样做。但我不会认为它是"正确的C++风格"。
如果有一天你将该头文件包含到另一个翻译单元中(可能是因为你只需要共享其中一个变量),链接器就会开始抱怨多个定义。
此时,为了克服这一点,可以使用static
关键字为这些变量提供内部链接,并解决多个定义的问题。然而,通过这种方式,每个转换单元(.cpp
文件)都将拥有这些变量的自己的副本,这可能不是您想要的,尤其是如果它们不是常量-只是为了记录,全局常量默认情况下具有内部链接,因此您不需要明确地将它们限定为static
。
这里的常规做法是将这些变量定义保留在main()
中,或者有一个仅包含这些变量的extern
声明的标头,以及一个包含其定义翻译单元。然后,所有需要访问这些变量的文件都将导入带有声明的头。
通常的做法是继续在main.cpp中定义它们,因为它们在一个不同的块中,不会影响代码的可读性。但是,您当然可以将它们移到一个单独的包含文件中,该文件只包含在一个.cpp中,这是一个完全取决于您的风格选择。
如果你谈论的变量是main私有的全局变量,我认为你应该让它们出现在main.cpp中。如果它们没有在其他地方使用,那么在头中声明它们是没有意义的
您还可以创建一个类来实现"main"特性,其中变量位于私有范围内,这样它们就不会被实现的其他部分使用。
- 在 c++ 中确定堆栈上的变量范围
- C++中静态方法的局部变量范围
- 功能原型变量范围C
- C 公共变量范围混乱
- 指向本地变量的指针存储在此变量范围之外
- C 变量范围
- 在函数的参数列表中初始初始化的变量范围
- 由于变量范围导致的段故障
- 友元运算符中的变量范围
- CMake <PROJECT-NAME>_SOURCE_DIR 变量范围
- switch 语句中的奇数变量范围
- C++ try 中的变量范围
- C++ 引用变量范围问题
- 更改静态变量范围
- C++向量、常量字符*、变量范围和生存期
- 对变量范围感到困惑 - 析构函数意外调用
- 限制变量范围的利弊
- 我的C++变量(范围相关)有什么问题?
- c++中变量范围嵌套不当
- Qt5、lambda和变量范围