c++ - 使用#include 包含代码段

标签 c++ include

我正在使用一个 3rd 方开源应用程序,它做了一些我认为很奇怪的事情。我想听听您的意见,看看您是否认为这是错误的/邪恶的/可憎的/等等,或者是否有正当理由这样做。

简单地说,他们使用#include pre-proc 指令来包含包含代码片段的“头文件”。不是函数的原型(prototype)。不是内联函数。只是部分代码。

这是一个简单的例子。首先是 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;
}

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

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

在实际程序中,有多个这样的#include 指令,每个指令都执行另一项小任务。

这看起来既危险又疯狂。我不知道他们为什么不将这些作为函数来编写和调用。

你的想法和意见?

最佳答案

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

就我个人而言,我不确定这种做法是好是坏。它就是这样,它是 OpenFOAM 代码文化的一部分(或者本地行话,如果你愿意的话)。乍一看很惊讶,但很快就会习惯。

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

关于c++ - 使用#include 包含代码段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15336494/

相关文章:

include - mkdocs include with --8<-- not interpreted

PHP 将一个网站包含到另一个网站中

c++ - C++ 类成员的默认值是什么

c++ - 我们可以声明一个结构体符合一个概念吗?

c++ - 在 visual studio 中更改 C++ 版本

php - 包含目录中的 all/javascript/*.js

c++ - 关于在omnetpp.ini中将两个不同的应用程序随机分配到50个节点

c++ - 如何查找我正在使用的 Windows C++ 内存分配器的详细信息?

c++ - 当我尝试包含 OpenNI.h 时没有这样的文件或目录

c++ - 为什么省略 “#include <string>”有时只会导致编译失败?