このページの COMMON に関する私の理解に基づいて、C++ に相当するものは、common.h
以下を含む (インクルード ガード付き) という名前のファイルを作成することです。
namespace BLK1
{
int const Gw = 200;
int const Eta = 4096;
int const t = 4096;
int const Phi = 200;
int const w = 200;
}
namespace BLK2
{
extern int g, dw, Vel, M, dt, N, Ioutp1, Ioutp2;
}
namespace BLK3
{
extern int Hs, Std, E, Hs1, Tdt;
}
また、プロジェクト内のちょうど 1 つの.cpp
ファイルで、const 以外の定義を提供する必要がありますfoo.cpp
。
#include "common.h"
namespace BLK2
{
int g, dw, Vel, M, dt, N, Ioutp1, Ioutp2;
}
namespace BLK3
{
int Hs, Std, E, Hs1, Tdt; // initialized to 0 by default
}
とは異なるタイプを使用したい場合がありint
ますunsigned long
。初期化された値は const であると想定しています。そうでない場合は、初期化子に変更int const
しextern int
て削除します。初期化子は、ファイル内の定義に入る必要があり.cpp
ます。
ヘッダーで非 const、非 extern 変数を宣言するという間違いを避けてください。これにより、ヘッダーが 2 つの異なるユニットに含まれている場合、未定義の動作が発生します。
これらの変数にアクセスするには、たとえば次のように記述BLK1::Eta
します。
ご想像のとおり、名前空間の代わりに aを使用する方が整頓されていると考えられるかもしれませんが、ヘッダーでstruct
宣言され、正確に 1 つのファイルで定義される構造体のインスタンスを作成する必要があります。C++11より前の場合、初期化子を提供するのは面倒です。extern
.cpp
(もちろん、グローバルを使用しないようにコードをリファクタリングする方が良いでしょう。しかし、直接変換を行うための最初のパスとしては役立つかもしれません)。