我正在使用一个 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/