2

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

#include "thelibr/version.h"

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

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

首先,我知道代码设置了两个变量 (majorminor) 的值,但我不清楚的是MAJOR和的值在哪里MINOR设置。他们设置在thelibr/version.h.

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

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

第四,如果我们在 中设置majorminor变量的值version.cpp,这些变量会在其他地方可见吗?这让我很奇怪,因为我们不使用任何像globalor这样的词external

4

1 回答 1

1

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

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

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

要使用majorminor从另一个.cpp文件,您可以声明version.h

extern const int major;
extern const int minor;

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

于 2013-08-12T11:11:51.710 回答