在我的文件夹中,我有一个小version.cpp
文件,其结构如下:
#include "thelibr/version.h"
const int major = MAJOR;
const int minor = MINOR;
我无法理解这段代码的作用以及代码的其余部分如何使用它(存储在同一目录的其他文件中)。
首先,我了解代码设置了两个变量(major
和minor
)的值,但我不清楚的是MAJOR
和{{1}的值已设置。它们是否设置为MINOR
。
其次,在执行上面给出的代码行时,我也不清楚。它们不会放入任何可能从其他文件中编码的其他方法调用的方法中。那么,如何调用这些行?
第三,我看到字符串thelibr/version.h
不存在于同一目录的任何其他文件中。这是否意味着这些文件都不使用version
中存储的代码。我们不应该在其他文件中的某处包含version.cpp
文件,以便能够使用version.h
中的代码吗?
第四,如果我们在version.cpp
中设置major
和minor
变量的值,这些变量会在其他地方显示吗?它让我感到很惊讶,因为我们不使用version.cpp
或global
等任何字词。
答案 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"
。