我有一个大型程序,我用它来建模物理系统。因此,我需要定义不同的常量和宏。出于这个原因,我选择了一个头文件,我在其中定义了所有这些内容。我把这个头文件包含在我项目中的所有.cpp文件中,如果需要的话。下面是这样一个头文件(constants.h)的例子:
#ifndef CONSTANTS_H
#define CONSTANTS_H
//global library
#include <fstream>
//constant
const double PI = 3.1415926535;
//macro
#define exp_2(x) ((x)*(x))
#endif
我在这里包含的库fstream,因为我的许多.cpp文件都需要它。我不是一个专业的程序员,但我想听听基于这个原理进行大型模拟的一般意见。你有什么建议吗?
答案 0 :(得分:2)
小心宏。它们看起来像函数,但语义不同,因为在您的示例中对(x)进行了双重评估,这可能会产生性能影响或破坏逻辑。例如,使用宏max / min / abs:
实施例。 1:
// would spill extra innocent blood
val = max(100, GetBloodSample(BS_LDL))
前2:
// can unexpectedly return a number which is less than 3.
val = max(3, schroedingerCat.GetNumPaws())
(定义为#define max(a,b) ((a)>(b)?(a):(b))
)
请改用内联函数。此外,您应该使用Tau instead of PI))
答案 1 :(得分:-3)
至少你应该将你的const变量定义为 static ,以避免错误和编译器警告(可能的)多个包含:
static const double PI = 3.1415926535;
另一种方法是在单个 .cpp 文件中定义PI,然后在标题中定义 extern 。