我应该在“main(){}”中“#include”语句吗?

Should I `#include` statements within `main(){}`?

本文关键字:#include 语句 main 我应该      更新时间:2023-10-16

我正在研究一个CFD求解器。我使用过相当数量的现有CFD求解器是OpenFOAM。OpenFOAM通常在其求解器中具有以下功能:

...
int main ()
{
    ...
    // Simplified version, but similar effect
    double time = 0.0;
    double endTime = 10.0;
    while (time < endTime)
    {
        ...
        #include "fileThatSolvesForVelocity.H"
        #include "fileThatSolvesForPressure.H"
        ...
        time += deltaT;
    }
}
在这里,包含

的文件并不是通常意义上的"标头",因为它们只包含要复制到main()中的语句。但是,由于它们重复运行(甚至可能在一个循环中重复运行(,因此减少了代码重复,并且还将部分划分为合理命名的"头"文件中。

IDE 通常不喜欢这种包含方式 - 它们不知道"标头"中的所有变量来自何处,也无法提供任何有意义的解释。

这种风格是"不好"的,还是只是方便使用C++ include机制?特别是,我是否应该尝试避免它,也许通过为每个字段使用分类对象?有没有更好的方法来做到这一点(如果需要,C++11 和 Boost 都可用(?

这不是

惯例。

我不确定你想在这里实现什么。对于编译器/链接器来说,这不是问题;在编译时,所有包含的文件在预编译阶段合并为一个,即绝对没有性能提升,可能相反。

如果您希望以某种方式对变量进行分组,则可以将所有变量放在类或命名空间中。如果要提高可读性等,可以在 IDE 中使用#region

是的,这很糟糕!将 #include 用于普通标头以外的任何内容通常是一个坏主意。

如果您确实想就地复制代码,请使用宏,但通常最好提取一个函数,甚至可能提取具有多个成员函数的类。

性能方面,内联函数的开销很小或没有,因为编译器很可能会跳过函数调用,除非代码太复杂,只是就地生成代码。如果性能存在问题,请在尝试任何优化之前和之后进行分析。