一个标头用于各种变量

One header for various variables

本文关键字:用于 变量 一个      更新时间:2023-10-16

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

小心宏。它们看起来像函数,但语义不同,因为在您的示例中对(x)进行了双重求值,这可能会导致性能后果或逻辑崩溃。例如,使用宏max/min/abs:

Ex。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))

至少您应该将常量变量定义为静态,以避免(可能的)多个包含的错误和编译器警告:

static const double PI = 3.1415926535;

另一种方法是在单个.cpp文件中定义PI,然后在头中定义extern