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

时间:2014-12-22 05:59:18

标签: c++ c++11 include

我正在研究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都可用)?

2 个答案:

答案 0 :(得分:1)

这不是惯例。

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

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

答案 1 :(得分:1)

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

如果你真的想复制代码,请使用宏,但通常最好提取一个函数,甚至可能是一个包含多个成员函数的类。

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