所以我的文件mine.cpp,中有以下代码
#include <iostream>
#define max INT_MAX
标识符";INT_ MAX";如果我删除"#包括<iostream>";。所以,我知道它是在iostream的某个地方定义的。
当我转到INT_MAX的定义时,它在limites.h文件中。所以,我猜limites.h嵌套在iostream中。
有没有一种方法可以让我在不构建的情况下查看(比如我的.cpp->iostream->…->limites.h(limites.htm是如何包含在我的mine.cpp中的。
我搜索并发现还有其他类似的问题,但所有与它们相关的答案都包括";用一些选项构建";。我必须在没有建筑的情况下完成这项工作,因为我的建筑需要相当长的时间才能完成。
这是一个奇怪的要求:
没有建筑。
您到底想避免什么?构建整个项目/解决方案?为了节省时间?
正如@dxiv和@Boris所指出的,您至少需要编译该文件。更严格地说,在上面运行预处理器来扩展宏、条件编译等。
从技术上讲,用/showIncludes
和/P
编译文件(对文件进行预处理(并不"有效";构建";,因为没有产生对象文件。
生成的输出是分层的,因此您可以获得完整的包含路径。
你没有提到你工作室的版本;这篇文章在Visual Studio Community 2019中生成包含文件的图,声明2019年企业版(可能还有2017年(具有"Generate Graph Of Include Files"
功能。然而,它使用的过程可能涉及编译或预处理:(
不知道在不进行编译的情况下(可靠地(可以做到这一点,因为最终是编译器检查include路径和依赖项。
但是,使用#include <iostream>
编译一个文件就足够了,而不是构建整个项目。例如,编译默认的";"C++控制台";向导生成的.cpp
生成一个debugsample.tlogCL.read.1.tlog
文件,该文件顶部包含以下内容。
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEIOSTREAM ***
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEYVALS_CORE.H
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEVCRUNTIME.H
<vs-path>VCTOOLSMSVC14.26.28801INCLUDESAL.H
<vs-path>VCTOOLSMSVC14.26.28801INCLUDECONCURRENCYSAL.H
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEVADEFS.H
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEXKEYCHECK.H
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEISTREAM ***
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEOSTREAM ***
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEIOS
<vs-path>VCTOOLSMSVC14.26.28801INCLUDEXLOCNUM ***
<vs-path>VCTOOLSMSVC14.26.28801INCLUDECLIMITS ***
<vs-path>VCTOOLSMSVC14.26.28801INCLUDELIMITS.H <--
<vs-path>VCTOOLSMSVC14.26.28801INCLUDECMATH
以上是导致limits.h
的#include
文件的超集。对各个报头的检查表明,实际路径是iostream
- istream
- ostream
- xlocnum
- climits
- limits.h
。