C++ 一个标题用于各种变量

C++ 一个标题用于各种变量,c++,header,constants,C++,Header,Constants,我有一个大程序,我用它来模拟一个物理系统。因此,我需要定义不同的常量和宏。出于这个原因,我选择了一个头文件,在其中我定义了所有这些东西。如果需要,我会在项目中的所有.cpp文件中包含此头文件。下面是此类头文件(constants.h)的示例: #ifndef常量 #定义常数 //全球图书馆 #包括 //不变的 常数双PI=3.1415926535; //宏 #定义exp_2(x)((x)*(x)) #恩迪夫 我在这里包含的库fstream,因为我的许多.cpp文件都需要它。我不是一个专业的程序

我有一个大程序,我用它来模拟一个物理系统。因此,我需要定义不同的常量和宏。出于这个原因,我选择了一个头文件,在其中我定义了所有这些东西。如果需要,我会在项目中的所有.cpp文件中包含此头文件。下面是此类头文件(constants.h)的示例:

#ifndef常量
#定义常数
//全球图书馆
#包括
//不变的
常数双PI=3.1415926535;
//宏
#定义exp_2(x)((x)*(x))
#恩迪夫

我在这里包含的库fstream,因为我的许多.cpp文件都需要它。我不是一个专业的程序员,但我想听听大家对基于这个原理进行大型模拟的普遍看法。您有什么建议吗?

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

static const double PI = 3.1415926535;

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

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

static const double PI = 3.1415926535;

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

小心宏。它们看起来像函数,但语义不同,因为在您的示例中(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()) 
(定义为
#定义最大值(a,b)((a)>(b)?(a):(b))


改用内联函数。另外,您应该使用Tau()

小心宏。它们看起来像函数,但语义不同,因为在您的示例中(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()) 
(定义为
#定义最大值(a,b)((a)>(b)?(a):(b))


改用内联函数。此外,您应该使用Tau()

使用该宏可能会导致意外结果,例如
exp_2(f())
将调用
f
两次。改为使用函数。常量可以,宏不能。改用内联函数。使用该宏可能导致意外结果,例如,
exp_2(f())
将调用
f
两次。改为使用函数。常量可以,宏不能。改为使用内联函数。正如前面回答(已删除)时所说的,默认情况下,命名空间范围内的
const
变量具有内部链接。在任何情况下,将定义放在
.cpp
文件中都会阻止编译器在编译时使用该值,这在大量使用PI的模拟中可能会对性能产生巨大影响。正如前面(已删除)回答中所说的,命名空间范围中的
const
变量默认情况下具有内部链接。在任何情况下,将定义放入
.cpp
文件将阻止编译器在编译时使用该值,在大量使用PI的模拟中,这可能会对性能产生巨大影响。在常量.h或.cpp文件中编写内联函数更可取吗?@niles_1710373:如果在.cpp文件中编写
内联
函数,则它仅在该.cpp文件中可用。这就是为什么通常将它们放在头文件中,然后头文件可以包含在每个.cpp文件中。最好是在常量.h或.cpp文件中编写内联函数?@niles_1710373:如果在.cpp文件中编写
内联
函数,则它只能在单个.cpp文件中使用。这就是为什么通常将它们放在头文件中,然后头文件可以包含在每个.cpp文件中。