2

我有一个大型程序,用于对物理系统进行建模。因此,我需要定义不同的常量和宏。出于这个原因,我选择了一个头文件,我在其中定义了所有这些内容。在需要的地方,我将这个头文件包含在我项目的所有 .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 文件都需要它。我不是专业的程序员,但我想听听基于此原理进行大型模拟的一般意见。你有什么建议吗?

4

2 回答 2

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而不是 PI ))

于 2013-02-05T13:15:35.943 回答
-3

至少你应该将你的 const 变量定义为static以避免(可能的)多个包含的错误和编译器警告:

static const double PI = 3.1415926535;

另一种方法是在单个.cpp文件中定义 PI,然后在标头中将其外部化。

于 2013-02-05T13:13:58.250 回答