Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何判断哪个#include提供了什么对象?_C++_C_Include - Fatal编程技术网

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