0

我正在熟悉科学的流体动力学代码。代码几乎总是使用预处理器指令,例如

#ifdef PARTICLES
    int nghost = 5
#else
    int nghost = 4
#endif

而不是更简单的 C 标志,例如,

int nghost = 4;
if( particlesFlag ) { nghost = 5; }

预处理器标志的缺点是(在此框架中)它需要在每次构建之前为每个问题设置进行配置(创建头文件),而使用 c 代码标志只需要重新编译。

这种方法的优点是什么?

似乎任何效率的提高都会非常小——尤其是因为这段代码(例如)只在程序初始化时运行一次,而所有真正的工作都发生在不同处理器的循环中,等等。

4

1 回答 1

0

假设我有数千个使用 nghost 的 API。如果已经定义了 PARTICLES,则在预处理期间所有这些变量将被 5 else by 4 替换。

您在谈论单个实例,大型项目是预处理有用的地方。

想想这个。

int x() { int a = nghost *5; }
int ab() { return (nghost+10); }

每次,如果使用,它的运行时间消耗

int x() { 
int a;
int nghost = 4;
if( particlesFlag ) { nghost = 5;}
a=nghost*5;
}


int ab() { 
int nghost = 4;
if( particlesFlag ) { nghost = 5;}
return (nghost+10); 

}

等等。

并考虑一下。

认为

#ifdef PARTICLES
int nghost = 5
int aghost = 5
int bghost = 5
int cghost = 5
int dghost = 5
int eghost = 5
int fghost = 5
#else
int nghost = 4
int aghost = 4
int bghost = 4
int cghost = 4
int dghost = 4
int eghost = 4
int fghost = 4
#endif
于 2013-02-08T18:48:34.553 回答