我应该在“main(){}”中“#include”语句吗?
Should I `#include` statements within `main(){}`?
我正在研究一个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 用于普通标头以外的任何内容通常是一个坏主意。
如果您确实想就地复制代码,请使用宏,但通常最好提取一个函数,甚至可能提取具有多个成员函数的类。
性能方面,内联函数的开销很小或没有,因为编译器很可能会跳过函数调用,除非代码太复杂,只是就地生成代码。如果性能存在问题,请在尝试任何优化之前和之后进行分析。
相关文章:
- 既然存在危险,为什么项目要使用-I include开关
- 使用许多嵌套的#include语句对编译器错误进行故障排除
- 有没有办法在评论以外的 #include 之后编写语句
- 有什么方法可以在C #include语句中使用通配符
- 如何使 Xcode 接受 #include 语句中的路径
- C++尝试使用 #ifndef 和 #include 语句
- Chaiscript #include biicode.conf 中的语句映射
- C++:与前向声明类和使用“#include”语句混淆
- include语句的顺序在链接步骤中如何重要
- 在语句中使用垃圾字符时没有编译器错误 #include
- #include Biicode (biicode.conf) 中的语句映射
- 我应该在“main(){}”中“#include”语句吗?
- 包含所有必需 #include 语句的单个头文件
- #include 指令和"using"语句的顺序在C++头文件的开头是否重要?
- 在include语句中斜杠是什么意思?
- 派生类中相同的#include语句
- 管理大量的#include语句和头文件
- 如何使用c++宏预处理器生成有效的include语句
- 嵌套的include语句便于c/c++编程
- 使用make构建时,在c++文件中泛化include语句