考虑下面的一小段代码:如何找出命名空间如何被污染?
// all of these include other headers, lots of code:
#include "myheader1.h"
#include "myheader2.h"
#include <string>
void foo() {
string s("hello world"); // oh no, why does this compile??
}
这将编译,所以很明显一些递归包含的头文件中有一个
using namespace std;
地方。你会如何去找出那些违规的代码行是在哪里?
只需使用grep
上的所有头文件将没有真正的工作,因为这句话经常被用来内的功能,它是安全的,不会污染代码的其余部分。
放置'string s;'时使用二进制搜索算法。它将采取“log(n)”步骤。 – 2010-04-08 18:40:41
在每个'#include'之后放置一个不具有相同的渐近行为,但对于小n更好。我已经完成了这两种方式,但vim的交叉点通常比VS 2008更高。 – 2010-04-08 18:48:04
N是头文件中的总行数。它可能非常大。 – 2010-04-08 18:57:02