似乎有两个包含Microsoft Visual Studio运行时源文件的path:
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ crt \ src
和
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ include
有些文件出现在两个目录中,但有不同的大小。 我特别查看了一个文件,并在两个文件中定义了相同的方法。
所以我的问题是,这两个path的用法有什么不同? 我想知道当我在Visual Studio中debugging(我不是指debugging模式),哪个文件是屏幕上的代码?
CRT位于Visual C ++库的底部:其余的库依赖于它,实际上所有的本地模块都依赖于它。 它包含两种东西:[1] C标准库和各种扩展,以及[2]运行时功能,如进程启动和异常处理。 由于CRT位于堆栈的底部,因此它是启动稳定库的过程的合理位置。
(1)我们用Visual Studio提供CRT的大部分资源; 您可以在VC \ crt \ src下的Visual Studio安装目录中找到它们。
(2)在Visual Studio 2013中,我们随产品提供的源中有6,830个#if
, #ifdef
, #ifndef
, #elif
和#else
指令; 在Visual Studio“14”CTP中有1656个。 这些数字不包括头文件中的指令,它们包含了STL源文件,这些文件在很大程度上不受这个重构的影响,所以这不是一个完美的测量,但是它表明了已经完成的清理的数量。
编辑1:
文章信息:
写: James McNellis
日期: 10 Jun 2014 9:00 AM
网址: http://blogs.msdn.com/b/vcblog/archive/2014/06/10/the-great-crt-refactoring.aspx
: http://blogs.msdn.com/b/vcblog/archive/2014/06/10/the-great-crt-refactoring.aspx
include
目录包含所有公共标题。 这些头文件可以包含在代码中,如<stdio.h>
和<type_traits>
,以及这些头文件所需的实现头文件。
crt\src
目录包含CRT源,包括用于构建CRT的大多数.asm
, .c
和.cpp
文件。 这个目录也有许多CRT头文件的副本,在某些情况下这些头文件与include
目录中的不同。 这完全是CRT如何构建的人造物。
在调试CRT头文件中定义的内联代码时,调试器应该总是选择正确的头文件。 如果两个目录都包含相同的头部副本,那么调试器将只选择一个,因为头部是相同的,所以选择哪一个并不重要。 如果标题不同,那么调试器选择哪个头取决于内联函数编译的对象。 如果这个对象是CRT的一部分,那么你将从crt\src
进入到头部。 如果对象来自其中一个源文件,那么您将从include
进入标题。 基本上,调试器应该总是能够找到正确的头部副本。
我们已经在Visual Studio“14”CTP中大大简化了这一点。 crt\src
目录中不再有任何公共头文件,并且include
目录中的头文件与用于构建CRT的相同。