2013-08-12 29 views
2

在我的文件夹我有一个小version.cpp文件结构如下:包括如何在C++中工作?

#include "thelibr/version.h" 

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

我无法理解这样的代码做什么以及如何使用它的代码的剩余部分(存储在相同的其他文件目录)。

首先,据我所知,代码将两个变量(majorminor),但什么是我不明白是哪里的MAJORMINOR值被设置的值。它们是否设置为thelibr/version.h

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

第三,我看到字符串version不存在于同一目录中的任何其他文件中。这是否意味着这些文件都不使用存储在version.cpp中的代码。我们不应该在其他文件中包含version.h文件,以便能够使用version.cpp中的代码吗?第四,如果我们在version.cpp中设置了majorminor变量的值,那么这些变量是否会在其他地方可见?它令我想起我,因为我们不使用任何字样,如globalexternal

回答

1

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

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

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

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

extern const int major; 
extern const int minor; 

再从其他文件#include "thelibr/version.h"

+1

恕我直言,如果你提供了一个例子,你可能会一路走来并显示一个样本version.h,version.cpp。否则,我担心你的回答可能会导致OP的混乱。 – idoby

+0

@busy_wait我还应该添加什么?除了我认为他已经拥有的头卫兵之外,这个特殊的例子似乎已经被覆盖了。问题是许多其他类型的情况,例如'inline'函数,'static'对象和'static'成员。说实话,听起来OP似乎并没有准备好深入C++。 – Potatoswatter

+0

我认为关于#includes的问题同样适用于C++的子集,看起来就像C. IMO最重要的一点应该是说明通过头文件共享#define与共享一个在其中一个实现文件中实际定义的变量的声明。只是我的两分钱。我不想通过写我自己的方式来削弱你的好回答。 – idoby