0

我有一个多文件程序,包括

main.cpp
ext1.cpp
ext2.cpp
ext3.cpp
vars.h

顾名思义,main.cpp 是主文件,extX.cpp 包含各种函数和 vars.h 一些全局常量。

但是,在 main.cpp 中也有(一些!)变量声明,但它们必须只在 main.cpp 的范围内——这就是我没有将它们放在 vars.h 中的原因

我想减少 main.cpp 中的代码量(为了清晰起见)。我正在寻找一种在某种标头中声明这些变量的方法,但它只对 main.cpp 可见。

是否正确理解,如果我将它们全部放在例如 vars_main.h(没有外部关键字)并且只包含“vars_main.h”,那么我已经实现了我的目标?

这样做是否被认为是“正确的”C++风格?

4

3 回答 3

1

通常的做法是继续在 main.cpp 中定义它们,因为它们位于不同的块中并且不会影响代码的可读性。但是,您当然可以将它们移到一个单独的包含文件中,该文件仅包含在一个 .cpp 中,这完全取决于您的风格选择。

于 2013-02-05T18:30:16.273 回答
1

如果您正在谈论的变量是main私有的全局变量,我认为您应该将它们放在main.cpp中。如果它们没有在其他任何地方使用,那么在标题中声明它们是没有意义的

您还可以使用私有范围内的变量创建一个实现“主要”功能的类,这样它们就不会被实现的其他部分使用。

于 2013-02-05T18:30:25.070 回答
1

如果这些变量仅在 中使用main(),那么是的,您可以这样做。但我不会认为它是“正确的 C++ 风格”。

如果有一天您最终将该头文件包含到另一个翻译单元中(可能是因为您只需要共享其中一个变量),链接器将开始抱怨多个定义

此时,为了克服这个问题,您可以使用static关键字为这些变量提供内部链接并解决多个定义的问题。但是,这样一来,每个翻译单元(.cpp文件)都将拥有自己的这些变量的副本,这可能不是您想要的,特别是如果它们不是常量- 只是为了记录,全局常量默认具有内部链接,所以您不需要明确地将它们限定为static.

这里的常规做法是将这些变量定义保留在 中main(),或者拥有一个仅包含这些变量extern 声明的标头和一个包含其定义的翻译单元。然后,所有需要访问这些变量的文件只需导入带有声明的标头。

于 2013-02-05T18:30:35.163 回答