根据我对本页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;
}
此外,.cpp
您需要在项目中的一个文件中为任何非常量提供定义,例如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
。我假设初始化的值是常量;如果不是,则更int const
改为extern int
并删除初始化程序。初始化程序必须进入.cpp
文件中的定义。
避免在头文件中声明非常量、非外部变量的错误;如果标头包含在两个不同的单元中,这会导致未定义的行为。
例如,您可以通过编写BLK1::Eta
来访问这些变量。
正如您推测的那样,使用 astruct
而不是命名空间可能会被认为更整洁,尽管您仍然必须创建extern
在标头中声明并在一个.cpp
文件中定义的结构的实例;如果您是 C++11 之前的版本,那么提供初始化程序会更烦人。
(当然,更好的办法是重构代码以不使用全局变量。但作为直接翻译的第一步可能会很有用)。