似乎有两个路径包含Microsoft Visual Studio运行时源文件:
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ crt \ src
和
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ include
某些文件出现在两个目录中,但大小不同。我特别查看了一个文件,它在两个文件中都定义了相同的方法。
所以我的问题是,这两条路径的使用有什么不同?我想在Visual Studio中调试时(我不是指调试模式),哪个文件是屏幕上的代码?
答案 0 :(得分:11)
include
目录包含所有公共标头。这些是您可以在代码中包含的标头,例如<stdio.h>
和<type_traits>
,以及这些标头所需的实施标头。
crt\src
目录包含CRT源,包括用于构建CRT的大多数.asm
,.c
和.cpp
文件。此目录还包含许多CRT标头的副本,在某些情况下,这些标头与include
目录中的标头不同。这纯粹是CRT如何构建的工件。
调试CRT标头中定义的内联代码时,调试器应始终选择正确的标头。如果两个目录都包含相同的标题副本,那么调试器只会选择一个,因为标题是相同的,所以它选择哪一个并不重要。如果标题不同,那么调试器选择哪个标头取决于编译内联函数的对象。如果该对象是CRT的一部分,您将从crt\src
步入标题;如果对象来自您的某个源文件,则您将从include
步入标题。基本上,调试器应始终能够找到标头的正确副本。
我们在Visual Studio&#34; 14&#34;中大大简化了这一点。 CTP。 crt\src
目录中不再有任何公共标题,include
目录中提供的标题与用于构建CRT的标题相同。
答案 1 :(得分:1)
CRT位于Visual C ++库堆栈的底部:其余库依赖于它,实际上所有本机模块也依赖于它。它包含两种内容:(1)C标准库和各种扩展,以及(2)进程启动和异常处理等所需的运行时功能。因为CRT位于堆栈的底部,所以它是开始稳定库的过程的合理位置。
来自The Great C Runtime (CRT) Refactoring by James McNellis:
(1)我们使用Visual Studio运送CRT的大部分资源;您可以在VC\crt\src
下的Visual Studio安装目录中找到它们。
(2)在Visual Studio 2013中,我们发布的来源中有6,830 #if
,#ifdef
,#ifndef
,#elif
和#else
指令与产品;在Visual Studio&#34; 14&#34; CTP有1,656。这些数字不包含标题中的指令,它们确实包含STL源文件,这些文件在很大程度上不受此重构工作的影响,因此这不是完美的测量,但它表明了#39的清理量。已经完成了。