【发布时间】:2013-03-11 10:39:35
【问题描述】:
我正在使用第 3 方开源应用程序,它做了一些我认为很奇怪的事情。我想听听您的意见,您是否认为这是错误的/邪恶的/可憎的/等等,或者是否有正当理由这样做。
简单地说,他们使用#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;
}
在 parseArgs.h 头文件中,有一个小代码片段。请注意,这正是 parseArgs.h 文件中的内容。这不是函数的一部分。没有包含守卫,只有以下 4 行:
argList args(argc, argv);
if(!args.valid()) {
cout << "Invalid arguments.";
exit(1);
}
在实际程序中,有几个这样的#include 指令,每个都执行另一个小任务。
这看起来既危险又疯狂。我不知道他们为什么不把这些写成函数。
你的想法和意见?
【问题讨论】:
-
我不认为这特别危险,但听起来确实很疯狂且更难维护。
-
我不推荐它,因为它使代码难以遵循和维护,但它在技术上没有任何问题。
-
通常人们使用函数和类似的东西来重用代码......
-
我特别喜欢包含的代码片段如何依赖于局部变量(可能不存在,或者存在但与预期的完全不同的东西),以及
using namespace std;声明在包含之前执行。看起来像一场等待发生的灾难。 -
也许这样做的人来自 PHP 世界。因为这在 PHP 社区中是一种几乎可以接受的做法