我有一个包含多个文件的程序
main.cpp
ext1.cpp
ext2.cpp
ext3.cpp
vars.h
顾名思义,main.cpp是主文件,extX.cpp包含各种函数,vars.h是一些全局常量。
然而,在 main.cpp 中也有(一些!)变量声明,但它们必须只在 main.cpp 的范围内——这就是为什么我没有将它们放在 vars.h 中
我想减少 main.cpp 中的代码量(为了清楚起见)。我正在寻找一种在某种 header 中声明这些变量的方法,但它只对 main.cpp 可见。
是否正确理解如果我将它们全部放在里面,例如vars_main.h(没有外部关键字)并且只包含“vars_main.h”,那么我就达到了我的目标吗?
这样做是否被认为是“正确的”C++ 风格?
最佳答案
如果这些变量仅在 main()
中使用,那么是的,您可以那样做。但我不会认为它是“正确的 C++ 风格”。
如果有一天您最终将该头文件包含到另一个翻译单元中(可能是因为您只需要共享这些变量中的一个),链接器将开始提示多个定义。
那时,为了克服这个问题,您可以使用static
关键字为这些变量提供内部链接并解决多重定义的问题。然而,这样一来,每个翻译单元(.cpp
文件)将拥有自己的那些变量的拷贝,这可能不是您想要的,尤其是当它们是not constant - 仅作记录,默认情况下全局常量具有内部链接,因此您无需将它们显式限定为 static
。
这里通常的做法是将这些变量定义留在 main()
中,或者有一个仅包含 extern
declarations 的 header 这些变量,以及一个包含它们的定义的翻译单元。然后,所有需要访问这些变量的文件只需导入带有声明的 header 。
关于c++ - 限制 header 中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714175/