如何在C ++中工作?

时间:2013-08-12 11:08:23

标签: c++ variables include visibility

在我的文件夹中,我有一个小version.cpp文件,其结构如下:

#include "thelibr/version.h"

const int major = MAJOR;
const int minor = MINOR;

我无法理解这段代码的作用以及代码的其余部分如何使用它(存储在同一目录的其他文件中)。

首先,我了解代码设置了两个变量(majorminor)的值,但我不清楚的是MAJOR和{{1}的值已设置。它们是否设置为MINOR

其次,在执行上面给出的代码行时,我也不清楚。它们不会放入任何可能从其他文件中编码的其他方法调用的方法中。那么,如何调用这些行?

第三,我看到字符串thelibr/version.h不存在于同一目录的任何其他文件中。这是否意味着这些文件都不使用version中存储的代码。我们不应该在其他文件中的某处包含version.cpp文件,以便能够使用version.h中的代码吗?

第四,如果我们在version.cpp中设置majorminor变量的值,这些变量会在其他地方显示吗?它让我感到很惊讶,因为我们不使用version.cppglobal等任何字词。

1 个答案:

答案 0 :(得分:1)

C ++没有像Python这样的模块系统,可以导出纯符号,并在另一个源文件中使用它们的值。相反,它有头文件:thelibr/version.h的内容基本上是复制粘贴代替#include行。处理该文件中的任何内容,就好像它已写在version.cpp文件中一样。

要从一个文件导出到另一个文件(或创建可由链接器或动态加载器解释的库),请使用extern存储,这是许多事情的默认设置。

确定从一个.cpp文件到下一个文件的可见内容相当复杂,但通常您不能共享编译时值,例如版本号;您只能共享对运行时对象的访问权限,例如存储版本号的int

要使用其他major文件中的minor.cpp,您可以在version.h中声明:

extern const int major;
extern const int minor;

然后从另一个文件中#include "thelibr/version.h"