C++ 如何判断哪个#include提供了什么对象?
有没有一种方法可以在不将每个C++ 如何判断哪个#include提供了什么对象?,c++,c,include,C++,C,Include,有没有一种方法可以在不将每个#include都变灰的情况下,判断Foo来自哪里 #include "Baz.h" #include "Quuz.h" int main() { Foo n; } 对。预处理源代码而不编译它。对于GCC或Clang,这意味着在“编译”时将-c替换为-E(可能会将输出文件名更改为-o。然后,您将拥有一个完整的扩展文件,并记录了所有#includes,并且可以将该文件grep并查看Foo的来源。我认为最简单的方法也是最愚蠢的方法:再次定义它并获取错误 #incl
#include
都变灰的情况下,判断Foo
来自哪里
#include "Baz.h"
#include "Quuz.h"
int main() {
Foo n;
}
对。预处理源代码而不编译它。对于GCC或Clang,这意味着在“编译”时将
-c
替换为-E
(可能会将输出文件名更改为-o
。然后,您将拥有一个完整的扩展文件,并记录了所有#includes,并且可以将该文件grep并查看Foo的来源。我认为最简单的方法也是最愚蠢的方法:再次定义它并获取错误
#include <iostream>
using namespace std;
typedef int cout; //<--- just for test
int main(){
cout<<"Hi!"<<endl;
return 0;
}
您可以使用:
构建标签:
$ cscope -R
然后选择:
查找此全局定义:Foo
它将向您显示在哪个文件中定义了
Foo
。取决于您的IDE。或者阅读文档考虑使用而不是grep
。您也有。对于emacs
等,Foo
也可以是宏,甚至可以通过宏扩展获得和声明(请参阅..)…因此,没有通用的傻瓜式解决方案…可能是一个包含多次的文件,使用不同的中介。不过,只有文档提供了包含文件,这些文件是库接口的一部分,以及哪些文件以合同形式提供了该符号,而不仅仅是偶然的。最好获得DEC这样做应该会容易得多。使用VAssist的Visual Studio非常好。不可移植,但非常棒!接受这一点…因为我将在余生中记住这一技术。
$ cscope -R