我正在使用第三方开源应用程序来执行我认为很奇怪的事情.我想听听你对你是否认为这是错误/邪恶/憎恶/等的看法,或者是否有合理的理由这样做.
简单地说,他们使用#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指令,每个指令执行另一个小任务.
这似乎是危险和疯狂的.我不知道他们为什么不写作并将其称为函数.
你的想法和意见?
我想你在这里谈论的是OpenFOAM.这些代码片段解决的问题是避免了OpenFOAM中许多应用程序需要的样板代码的重复.将此代码放在函数中将无法解决问题,因为函数内声明的变量是其作用域的局部变量.或许可以想出一个包含这些变量作为成员的基类方案.但这只会添加另一层间接,并不能真正解决任何问题.你仍然依赖于变量名(或者,如果你想让它变得干净,那就是getter-names).
就个人而言,我不确定这种做法是好还是坏.它是如何,它是OpenFOAM代码文化(或本地术语,如果你想)的一部分.乍一看它令人惊讶,但人们很快习惯它.
但是,除非您自己开发OpenFOAM应用程序/扩展,否则我强烈反对这种做法.OpenFOAM有点独特之处在于它包含几乎数百个可执行文件,这些可执行文件都需要一些难以维护的重叠样板代码.如果你不是那种情况,那就不要这样做.
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |