使用#include包含代码部分

Mad*_*ent 5 c++ include

我正在使用第三方开源应用程序来执行我认为很奇怪的事情.我想听听你对你是否认为这是错误/邪恶/憎恶/等的看法,或者是否有合理的理由这样做.

简单地说,他们使用#include pre-proc指令来包含包含代码片段的"头文件".不是函数的原型.不是内联功能.只是代码的一部分.

这是一个简单的例子.首先是main.cpp文件:

#include <iostream>
//Other "normal" includes here...

int main(int argc, char *argv[]) {

  cout << "Initializing program..." << endl;
  #include "parseArgs.h"

  // ... remainder of the program

  cout << "Exiting." << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且在parseArgs.h头文件中,有一个小代码片段.请注意,这只是parseArgs.h文件中的内容.这不是功能的一部分.没有包含警卫,只有以下4行:

argList args(argc, argv);
if(!args.valid()) {
  cout << "Invalid arguments.";
  exit(1);
}
Run Code Online (Sandbox Code Playgroud)

在真实的程序中,有几个#include指令,每个指令执行另一个小任务.

这似乎是危险和疯狂的.我不知道他们为什么不写作并将其称为函数.

你的想法和意见?

Mic*_*ild 7

我想你在这里谈论的是OpenFOAM.这些代码片段解决的问题是避免了OpenFOAM中许多应用程序需要的样板代码的重复.将此代码放在函数中将无法解决问题,因为函数内声明的变量是其作用域的局部变量.或许可以想出一个包含这些变量作为成员的基类方案.但这只会添加另一层间接,并不能真正解决任何问题.你仍然依赖于变量名(或者,如果你想让它变得干净,那就是getter-names).

就个人而言,我不确定这种做法是好还是坏.它是如何,它是OpenFOAM代码文化(或本地术语,如果你想)的一部分.乍一看它令人惊讶,但人们很快习惯它.

但是,除非您自己开发OpenFOAM应用程序/扩展,否则我强烈反对这种做法.OpenFOAM有点独特之处在于它包含几乎数百个可执行文件,这些可执行文件都需要一些难以维护的重叠样板代码.如果你不是那种情况,那就不要这样做.