Visual C++的默认include

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual C++的默认include相关的知识,希望对你有一定的参考价值。

我打算学习使用Visual Leak Detector(1.0)在某引擎中检测内存,这个工具需要将头文件放置于visual c++的默认include文件夹中,该如何寻找这个文件夹?C++新手求指导,问了一些人都没有答案。

http://vld.codeplex.com/
官方网站,自己点击Documentation,文档有,自己看看。
每个C++工程必须单独设置(VS2010以及VS2012):
你需要在View-属性管理器,选择Microsoft.Cpp.Win32.user,选择“VC++ 目录”还有就是“库文件”。
VS2008以下:
“工具”-“选项”-“项目和解决方案”-“VC++目录”
include files
library files
自己设置一下
Using Visual Leak Detector

Important! : Before using VLD with any Visual C++ project, you must first add the Visual Leak Detector include and library directories to the Visual C++ include and library directory search paths:
For all compiler versions take care to ensure that no junk characters get added when you add the include and library paths. If you browse to the "Program Files(x86) folder using the dialog box provided by Visual Studio and select it you could end up seeing the "%" replacing the "(".

And remember to close and open the Visual Studio IDE once you have modified the default include and library paths which the compiler and linker would always look at.

Visual C++ 2010: Go to View ->Property Manager, select Microsoft.Cpp.Win32.user. Select VC++ Directories and then "Include files" from the tree. Add the include subdirectory from the Visual Leak Detector installation directory. Move it to the bottom of the list. Then select "Library files" from the drop-down menu and add the lib\Win32 subdirectory from the Visual Leak Detector installation directory. Again, move it to the bottom of the list. Repeat for Microsoft.Cpp.x64.user, but select lib\Win64subdirectory instead.
Visual C++ 2005 and 2008: Go to Tools -> Options -> Projects and Solutions -> VC++ Directories. Select"Include files" from the "Show Directories For" drop-down menu. Add the include subdirectory from the Visual Leak Detector installation directory. Move it to the bottom of the list. Then select "Library files"from the drop-down menu and add the lib\Win32 subdirectory from the Visual Leak Detector installation directory. Again, move it to the bottom of the list.
Visual C++ 2003: Go to Project Properties -> C/C++ -> General -> Additional Include Directories and add the include subdirectory from the Visual Leak Detector installation directory. Move it to the bottom of the list. Then select Additional Library Directories and add the lib\Win32 subdirectory from the Visual Leak Detector installation directory. Again, move it to the bottom of the list.
Visual C++ 6: Go to Tools -> Options -> Directories. Select "Include files" from the "Show Directories For"drop-down menu. Add the include subdirectory from the Visual Leak Detector installation directory. Move it to the bottom of the list. Then select "Library files" from the drop-down menu and add the lib\Win32subdirectory from the Visual Leak Detector installation directory. Again, move it to the bottom of the list.

To use VLD with your project, follow these simple steps:

In at least one C/C++ source file from your program, include the vld.h header file. It should not matter which file you add the include statement to. It also should not matter in what order the header is included in relation to other headers. The only exception is stdafx.h (or any other precompiled header). A precompiled header, such as stdafx.h, must always be the first header included in a source file, so vld.hmust be included after any precompiled headers.
If your program contains one or more DLLs that you would also like to check for memory leaks, then also include vld.h in at least one source file from each DLL to be included in leak detection.
Build the debug version of your program.

Note: Unlike earlier (pre-1.9) versions of VLD, it is now acceptable to include vld.h in every source file, or to include it in a common header that is included by many or all source files. Only one copy of the VLD code will be loaded into the process, regardless of how many source files include vld.h.
VLD will detect memory leaks in your program whenever you run the debug version. When you run the program under the Visual C++ debugger, a report of all the memory leaks detected will be displayed in the debugger's output window when your program exits (the report can optionally be saved to a file instead, seeReportFile under Configuration Options). Double-clicking on a source file's line number in the memory leak report will take you to that file and line in the editor window, allowing easy navigation of the code path leading up to the allocation that resulted in the memory leak.

Note: When you build release versions of your program, VLD will not be linked into the executable. So it is safe to leave vld.h included in your source files when doing release builds. Doing so will not result in any performance degradation or any other undesirable overhead.
Last edited Oct 29, 2011 at 5:18 PM by pramis, version 5
参考技术A 你表述的不是很清楚,VisualC++创建不同类型的工程时#include包含的.h头文件是不一样的。MFC和Win32工程,肯定是不一样的。 参考技术B http://bbs.csdn.net/topics/10393895追问

不是这个,我找到这个了

在开始菜单中知道你装的 VC 的程序组, 进 Visual Studo Tools, 打开 Command Prompt, 输入 echo %include% 回车

在 Visual Studio 中显示 C++ 文件的 #include 层次结构

【中文标题】在 Visual Studio 中显示 C++ 文件的 #include 层次结构【英文标题】:Displaying the #include hierarchy for a C++ file in Visual Studio 【发布时间】:2010-11-11 09:33:54 【问题描述】:

问题:我有一个大型 Visual C++ 项目,我正在尝试迁移到 Visual Studio 2010。它包含来自不同来源和不同年龄的大量内容。我遇到了问题,因为其中包含 winsock.hwinsock2.h

问题:有哪些工具和技术可用于显示 Visual Studio C++ 源文件的 #include 层次结构?

我知道 cl /P 用于获取预处理器输出,但这并不能清楚地显示哪个文件包含哪些其他文件(在本例中为 /P 输出长度为 376,932 行 8-)

在一个完美的世界中,我希望分层显示哪些文件包括哪些其他文件以及行号,以便我可以跳转到源代码:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h

【问题讨论】:

对于寻找 GCC/Clang 解决方案的人,使用gcc -H -fsyntax-only ... 输出层次结构。感谢***.com/a/18593344/427545 【参考方案1】:

有一个设置:

项目设置 -> 配置属性 -> C/C++ -> 高级 -> 显示包含

这将生成树。它映射到编译器开关/showIncludes

【讨论】:

注意:层次结构可以在输出窗口中看到。 如果有人感兴趣:即使您选择 Clang platform toolset,如果您在 C/C++ -> Command Line - Additional Options 中添加 -H,您仍然可以“显示包含” 仍然不如 gcc 的“包含自”功能,后者显示与编译时错误相关的直接包含层次结构,并且还显示行号。 我制作了一个快速的正则表达式,去除了 Visual Studio 包含的内容(Program Files (x86) 下的任何内容)。您可以将输出窗口复制并粘贴到 Notepad++ 之类的应用程序中,然后执行正则表达式查找并用空白替换以从树中删除所有 VS 包含:1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$) 请注意,虽然可以为单个源文件切换 /showIncludes,但除非在项目级别设置 /showIncludes,否则它将不起作用。【参考方案2】:

编译器还支持 /showIncludes 开关——它不会为您提供行号,但可以提供一个非常全面的视图来了解哪些包含来自何处。

它位于项目设置 -> 配置属性 -> C/C++ -> 高级 -> 显示包含。

【讨论】:

+1 非常感谢! (但我担心 xtofl 会因为更快而被接受)。【参考方案3】:

我们发现IncludeManager 是一个非常强大的工具。它不是免费的(但并不昂贵),它使我们能够掌握我们的 Include 问题,并通过删减大量未使用的 include 将编译时间从 50 分钟缩短到 8 分钟。

【讨论】:

喂!我在有问题的文件上运行了 IncludeManager,它生成了一个让我大笑的图表。根据我的计算,我需要一台 400 英寸的显示器才能看到整个情况。我认为我们已经超出了它的能力范围。8-) 更新 - IncludeManager 的母公司 ProFactor (www.profactor.co.uk) 已经停业,但从上述网站免费提供其最新版本。缺点是它仅适用于从 VS2005 到 VS2013 的完整版 Visual Studio。 IncludeManager 链接自 9 月 21 日起已更改:profactor.co.uk/home IncludeManager 需要 Visual Studio.NET 2005 到 2013,所以几乎不再可用。【参考方案4】:

不如 gcc 的分层包含功能,它在出错的情况下显示直接包含层次结构。 VS 中的“显示包含”选项显示所有内容,这在调试分层包含文件问题时显得过大。

【讨论】:

我已经等了 5 年了,我和 mingw 一起使用过。 也许添加一些关于如何使用它的细节,文档在哪里等等?这个答案目前并没有增加太多。 不需要文档。当发生编译时错误时,gcc 只显示包含层次结构。【参考方案5】:

现在有一个名为 IncludeToolbox 的 Visual Studio 插件。它可以列出您的依赖包含并执行更多操作,例如随机删除和编译以查看是否需要该包含。

【讨论】:

【参考方案6】:

Here 是一款不错的第三方开源工具。您可以将结果导出为 XML,其中将包含有关出现次数和行号的数据。

【讨论】:

【参考方案7】:

尝试redhat Source-Navigator 以获得更多graphical solution。

【讨论】:

【参考方案8】:

我将Doxygen 和GraphViz 用于类层次结构图形,并在文本中使用依赖关系树。

Doxygen: Class Hierarchy

Doxygen diagrams: include hierarchy (classes)

同时安装。确保选择 GraphViz 作为生成层次图的工具。选择“使用 GraphVix 包中的点工具”。

还要确保将 GraphViz 中的二进制目录包含到您的 PATH 环境变量中。

【讨论】:

我试过这个,但我无法找到一种方法来显示包含头层次结构。我可以看到类 X 派生自类 Y 以及 graphviz 中的类似内容,但不是包含列表。是否有一些我错过的隐藏旋钮? 我明白了。 GraphViz 只会以图形方式显示您提到的内容(类层次结构)。这是 Doxygen 的一个示例:doxygen.nl/manual/examples/diagrams/html/hierarchy.html 如果您不使用类并且需要不同的列表,也许您可​​以尝试另一个答案。我会更新答案。谢谢。 是的,它对类层次结构问题非常有用——我喜欢它生成的图表。但是,我正在寻找标题包含图,我认为这是 OP 在这里列出的。我会尝试其他一些问题。感谢您强迫我完成这项工作(尽管它在我的整个代码库中崩溃,因为它非常大,但它在子集上效果很好)【参考方案9】:

cl /P 应该向您显示行号,以便您可以了解包含头文件的上下文。

如果你用 ... 找出这些行

grep "^#line" file.i

...那么您应该对预处理器按顺序遇到的文件有一个非常清晰的指示。

如果是一次性事件,这应该是一个非常快速的诊断。

【讨论】:

当然,但这给了我八千行非结构化输出,没有层次结构。 我已经浏览了 cl /P 输出很长时间了,想知道是否有更好的工具来完成这项工作。现在我发现有,这很棒。这个问题笼统的,答案将永远在这里,供其他人找到。

以上是关于Visual C++的默认include的主要内容,如果未能解决你的问题,请参考以下文章

修改默认 Visual C++ 项模板

Visual C++的默认include

如何在 Visual C++ 2010 的源文件中“默认”添加注释

Visual C++ 2010 Express 中默认的 C++0x 模式是啥?

将 C++ 项目从 Visual Studio 2008 转换为 Visual Studio 2010

如何在 Visual C++ 中加载不同语言的对话框?