2

私のフォルダーにはversion.cpp、次の構造の小さなファイルがあります。

#include "thelibr/version.h"

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

このコードが何をするのか、コードの残りの部分 (同じディレクトリの他のファイルに保存されている) でどのように使用されているのか理解できません。

まず、コードが 2 つの変数 (majorと) の値を設定することは理解していますが、とminorの値がどこに設定されているかはわかりません。に設定されていますか。MAJORMINORthelibr/version.h

第 2 に、上記のコード行が実行されるタイミングも明確ではありません。これらは、他のファイルでコーディングされた他のメソッドから呼び出される可能性のあるメソッドには配置されません。では、これらの行をどのように呼び出すことができるのでしょうか?

version3 番目に、同じディレクトリの他のファイルには文字列が存在しないことがわかります。これらのファイルのどれも、に保存されているコードを使用していないということですかversion.cppversion.hからのコードを使用できるように、ファイルを他のファイルのどこかに含めるべきではありませんversion.cppか?

major第 4 に、との値を に設定すると、これらのminor変数version.cppは別の場所に表示されますか? globalや などの言葉を使わないので不思議ですexternal

4

1 に答える 1

1

C++ には、純粋なシンボルをエクスポートして、その値を別のソース ファイルで使用できる Python のようなモジュール システムがありません。代わりにヘッダー ファイルがあります: の内容thelibr/version.hは基本的に行の代わりにコピー アンド ペーストされ#includeます。そのファイル内のすべては、ファイルに書き出されたかのように処理されversion.cppます。

あるファイルから別のファイルにエクスポートする (またはリンカーやダイナミック ローダーで解釈できるライブラリを作成する) にexternは、多くの場合の既定値であるストレージを使用します。

あるファイルから次のファイルに何が表示されるかを決定する.cppのはかなり複雑ですが、原則として、バージョン番号などのコンパイル時の値を共有することはできません。intバージョン番号を格納するなどのランタイム オブジェクトへのアクセスのみを共有できます。

別のファイルから使用するmajorには、次のように宣言できます。minor.cppversion.h

extern const int major;
extern const int minor;

そして#include "thelibr/version.h"、他のファイルから。

于 2013-08-12T11:11:51.710 に答える